Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套资源问题_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 嵌套资源问题

Ruby on rails 嵌套资源问题,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在努力将一个id成功地传递到我的URL中,该URL用于我已设置的名为Jobs的嵌套资源 当我试图将@job对象传递到我的链接时,我遇到的错误如下: No route matches {:action=>"edit", :controller=>"jobs", :user_id=>1, :id=>nil} 这清楚地表明它无法正确地找到id,因此查找nil 目前,我的路线设置如下: resources :users do resources :jobs e

我正在努力将一个id成功地传递到我的URL中,该URL用于我已设置的名为Jobs的嵌套资源

当我试图将
@job
对象传递到我的链接时,我遇到的错误如下:

  No route matches {:action=>"edit", :controller=>"jobs", :user_id=>1, :id=>nil}
这清楚地表明它无法正确地找到id,因此查找
nil

目前,我的路线设置如下:

 resources :users do
   resources :jobs
 end
我的链接是

有趣的是,如果我传递的对象
@jobs
末尾带有“s”,它将正确加载页面,但当我单击链接时,将尝试添加所有用户的作业id

在用于编辑的控制器中,我有:

def edit
 @user = current_user
 @job = @user.jobs.find(params[:id])
end
任何帮助都将不胜感激:)

更新

好的,我在控制器的错误页面上定义了对象(在编辑而不是索引下)。我现在遇到的问题是没有ID就找不到工作

我将控制器索引定义更新为:

 def index
  @user = current_user
  @jobs = @user.jobs.all
  @job = @user.jobs.find(params[:id])
 end
在我看来(就业指数)


...
...

如果您知道我哪里出了问题,请提供任何建议:)

该错误意味着
@job
为零

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

查看实际呈现该页面的代码(它将出现在堆栈跟踪中),您会发现@job没有设置。我怀疑您在索引页上,有如下内容:

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

该错误意味着
@job
为零

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

查看实际呈现该页面的代码(它将出现在堆栈跟踪中),您会发现@job没有设置。我怀疑您在索引页上,有如下内容:

<% @jobs.each do |job| %>
  ...
  <%= link_to "Edit", edit_user_job_path(@user.id,@job) %>
  ...
<% end %>
(在iHiD自己的帖子中对其评论进行了扩展)

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

user_jobs GET    /users/:user_id/jobs(.:format)          jobs#index
如您所见,索引操作没有:id(params[:id])

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

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

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

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

您可以专门为编辑用户作业路径发布rake routes输出吗?你说的是@user.id,而不是@job.id?我以前听过@作业必须为零。您可以专门为编辑用户作业路径发布rake routes输出吗?你说的是@user.id,而不是@job.id?我以前听过@作业必须为零。感谢iHiD,您是对的,我在控制器的错误页面上定义了对象。然而,现在我已经定义了一些事情(上面更新了答案),我不断地得到
如果没有ID就找不到工作
-你知道我在这方面哪里出了问题吗?谢谢您根本不需要行
@job=@user.jobs.find(params[:id])
。你列出了所有的工作。您不需要找到一个单独的对象。谢谢iHiD,您是对的,我在控制器的错误页面上定义了对象。然而,现在我已经定义了一些事情(上面更新了答案),我不断地得到
如果没有ID就找不到工作
-你知道我在这方面哪里出了问题吗?谢谢您根本不需要行
@job=@user.jobs.find(params[:id])
。你列出了所有的工作。你不需要找一个人。