我正在努力将id成功传递到我设置的名为Jobs的嵌套资源的URL中。
当我尝试将@job
对象传递给我的链接时,我得到的错误如下:
No route matches {:action=>"edit", :controller=>"jobs", :user_id=>1, :id=>nil}
这清楚地表明它无法正确找到ID,因此找到nil
目前我的路线设置如此:
resources :users do
resources :jobs
end
我的链接是<%= link_to "Edit", edit_user_job_path(@user.id,@job) %>
有趣的是,如果我在末尾传递带有's'的对象@jobs
,它将正确加载页面,但是当我点击该链接时,将尝试添加所有该用户的作业ID。
在我的编辑器中我有:
def edit
@user = current_user
@job = @user.jobs.find(params[:id])
end
真的非常感谢任何帮助:)
更新
好的,我在控制器的错误页面上定义了对象(在编辑而不是索引下)。我现在遇到的问题是Couldn't find Job without an ID
我将控制器索引定义更新为:
def index
@user = current_user
@jobs = @user.jobs.all
@job = @user.jobs.find(params[:id])
end
并且在我看来(作业#index)
<% @jobs.each do |f| %>
...
<%= link_to "Edit", edit_user_job_path(@user.id,job) %>
...
<% end %>
如果你知道我哪里出错,任何建议都会非常感激:)
答案 0 :(得分:2)
该错误意味着@job
为零。
链接指向编辑路径,您提供的控制器代码来自控制器中的编辑操作。编辑页面似乎不太可能链接到自己。
查看实际呈现该页面的代码(它将出现在堆栈跟踪中),您会发现@job未设置。我怀疑你在索引页面上有类似的东西:
<% @jobs.each do |job| %>
...
<%= link_to "Edit", edit_user_job_path(@user.id,@job) %>
...
<% end %>
如果是这种情况,那么链接应该是job
,而不是@job
,即
<%= link_to "Edit", edit_user_job_path(@user.id,job) %>
答案 1 :(得分:1)
(以自己的帖子扩展iHiD的评论)
使用restful资源意味着你将使用rails默认值,这意味着索引页面会为您提供所有Jobs的列表,默认情况下没有单个特殊作业。如果从命令行运行rake routes
,则会获得所有路由,其中包含从URI设置的参数。它应该给你这样的东西:
user_jobs GET /users/:user_id/jobs(.:format) jobs#index
正如您所看到的,索引操作没有:id(params [:id])。