0

Jobsと呼ばれる設定したネストされたリソースのURLにIDを正常に渡すのに苦労しています。

オブジェクトをリンクに渡そうとしたときに発生するエラー@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 %>

その場合、リンクはjobではなくへ@job、つまり

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

(彼自身の投稿で iHiD のコメントを拡張)

安らかなリソースを使用するということは、レールのデフォルトを使用することを意味します。つまり、インデックス ページにはすべてのジョブのリストが表示され、デフォルトでは特別なジョブは 1 つもありません。コマンド ラインから実行するrake routesと、URI から設定されたパラメーターを使用して、すべてのルートが取得されます。次のような結果が得られるはずです。

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

ご覧のとおり、index アクションには :id (params[:id]) がありません。

于 2012-06-12T16:07:44.290 に答える