新手问题 找不到对应的 params [:id]

sylan401 · 2013年06月14日 · 最后由 sylan401 回复于 2013年06月19日 · 4017 次阅读

我创建了一个 course 表,但是没有使用 courses 作为 controller,而是新建了一个 select_controller,下面是 select/index 中的代码: <% @courses.each do |course| %>

<%= course.course_no %> <%= course.course_name %> <%= link_to '选择', :controller => "select", :action => "new" %> <%= link_to '删除', :controller => "select", :action => "destroy", data: { confirm: 'Are you sure?' } %> <% end %> 其中@courses= Course.all,转到 new 方法中我使用@course = Course.find(params[:id]) 时,提示 Couldn't find Course without an ID,而我将此代码放入 courses_controller 中则不会报错,因为 courses 中已经做了其他功能,因此想移出来,求问高手知道怎样做吗? 另外我学 rails 不够深入,想请教高手有没有 ajax 做异步查询的例子,比如学院/专业,查询在此里面的课程,做在一个页面之内,谢谢?

new 方法中本来就没有:id。。。。如果是 resources 路由的话。

没大看明白... new 方法不是新建一个 course 用的么?为什么要去 find params[:id] ?

其实我是想做一个关系数据库,建立了三个表,student,student_course,course,其中我想对 student_course 进行操作,使 student 和 course 联系起来,因此必须使用两者的 id,通过查询课程,我想讲 course_id 取下来,放入 student_course 的 course_id 中,代码可能有点乱,但大概思路就是这样。

#1 楼 @mingyuan0715 我不是用的 resourse 路由,而是用的 get 方法,方法可以随意定,此控制器没有绑定 resourses

#2 楼 @blacktulip new 方法是我自己随意定的,可以改一改名字,但是还是会报错

#5 楼 @sylan401 路由发来看看。。你选择那里应该加个:id=>couse 吧。

#6 楼 @mingyuan0715 你好,前两天有点事情去了,现在发我的路由 Pictures::Application.routes.draw do get "select/grade" get "select/destroy" get "select/index" get "select/new" get "select/show"

resources :notices

resources :labs

get "new_experiment/index" get "new_experiment/show"

resources :majors resources :colleges mount Ckeditor::Engine => '/ckeditor'

resources :sessions, only: [:new, :create, :destroy]

resources :news resources :users resources :courses

get "login/index" get "login/login" get "login/news" get "login/show" get "login/download" get "login/download1" get "login/center_introduce" get "login/center_special" get "login/center_teachers" get "login/courses_index" get "login/courses_query"

get "login/student"

match '/signup', to: 'users#new' match '/signin', to: 'sessions#new' match '/signout', to: 'sessions#destroy', via: :delete

root :to => 'login#index'

match ':controller(/:action(/:id))(.:format)' end

这种情况下最好使用 nested 来做

如果不想,手动把 course_id 当成参数传过去,鼠标停在连接的地方就知道他传了什么参数,对不对了

#8 楼 @ZombieCoder 手动把 course_id 当成参数传过去,这句话我不是很懂,能解释一下吗。是用 debugger 来做吗,鼠标停在连接的地方,我一般是用的浏览器来查看具体生成的 html 代码,看 guides 里面的 form 参数也是用 params[:XXX]来查看的,好像也没有错。

10 楼 已删除

#9 楼 @sylan401

最笨的方法 <%= link_to '选择', '/select/new?id=#{@course.id}' %> or link_to "select", :controller => "select", :action => "new", :id => @course.id

#11 楼 @karmue 那个也不行,按理来说应该可以的,我的 select 控制器中的 new 方法 def new @course = Course.find(params[:id]) @student_course = StudentCourse.new @student_course.course_id = @course.id @student_course.student_id = current_user.id if @student_course.save redirect_to :action => "index", :controller => "courses" else redirect_to :action => "index", :controller => "select" end end 如果采用<%= link_to '选择', '/select/new?id=#{@course.id}' %>,在当前页面可以显示,但是点击选择之后,会提示:Couldn't find Course with id= ,网页错误。 采用第二种形式连此网页都不能显示,提示有错误: Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

我写错了是 course.id 不是@course.id

而且后面含有 ruby variable 的 string 应该用双引号

#13 楼 @karmue 好了,thank you!!!我是要试一试 nested,呵呵

需要 登录 后方可回复, 如果你还没有账号请 注册新账号