0

我正在努力将一个 ID 成功传递到我设置的嵌套资源的 URL 中,称为 Jobs。

当我尝试将对象传递到我的链接时,我得到的错误@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) %>

有趣的是,如果我@jobs在最后传递带有“s”的对象,它将正确加载页面,但是当我单击链接时,将尝试添加所有该用户的作业 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

在我看来 (jobs#index)

<% @jobs.each do |f| %>
 ...
 <%= link_to "Edit", edit_user_job_path(@user.id,job) %>
 ...
<% end %>

如果您知道我哪里出错了,任何建议将不胜感激:)

4

2 回答 2

2

该错误意味着它@job为零。

该链接指向编辑路径,您提供的控制器代码来自控制器中的编辑操作。编辑页面似乎不太可能链接到自身。

查看实际呈现该页面的代码(它将出现在您的堆栈跟踪中),您会发现 @job 未设置。我怀疑你在索引页面上并且有类似的东西:

<% @jobs.each do |job| %>
  ...
  <%= link_to "Edit", edit_user_job_path(@user.id,@job) %>
  ...
<% end %>

如果是这种情况,那么链接应该是 to job,而不是@job,即

<%= link_to "Edit", edit_user_job_path(@user.id,job) %>
于 2012-06-10T01:18:16.827 回答
1

(用他自己的帖子扩展 iHiD 的评论)

使用 restful 资源意味着您将使用 rails 默认值,因此意味着索引页面会为您提供所有作业的列表,并且默认情况下没有单个特殊作业。如果您从命令行运行rake routes,您将获得所有路由,以及从 URI 设置的参数。它应该给你这样的东西:

user_jobs GET    /users/:user_id/jobs(.:format)          jobs#index

如您所见,索引操作没有 :id (params[:id])。

于 2012-06-12T16:07:44.290 回答