7

form_for のネストされたリソースに関する質問をたくさん調べましたが、解決策が見つかりません。個人的な質問をする時が来たと思いました。

仕事と質問の 2 つのモデルがあります。仕事には多くの質問があり、質問は仕事に属しています。

スキャフォールディングを使用してコントローラーとモデルを作成し、次にリソースを routes.rb にネストしました。

root :to => "pages#home"

resources :jobs do
   resources :questions
end

get "pages/home"
get "pages/about"
get "pages/contact"


class Job < ActiveRecord::Base
   has_many :questions
end

class Question < ActiveRecord::Base
   belongs_to :job
end

現在、「/jobs/1/questions/new」にアクセスしようとしていますが、

質問の NoMethodError#new

コードが_

<%= form_for(@question) do |f| %>

これが間違っていることはわかっているので、他のコンボを試してみましたが、どれもうまくいきませんでした。

私はもう試した

 <%= form_for([@job.questions.build ]) do |f| %>

それ

 <%= form_for([@job, @job.questions.build ]) do |f| %>

それ

<%= form_for(@job, @question) do |f| %>

他の多くの組み合わせの中で、それは機能していません。

ここに私のレーキルートへのリンクがあります: git clone https://gist.github.com/1032734

さらに詳しい情報が必要な場合はお知らせください。

4

2 に答える 2

12

追加オプションとして URL を渡すだけです。

<%= form_for(@question, :url => job_questions_path(@job)) do %>

編集:

また試してください:

form_for([@job, @question])
于 2011-06-18T03:38:10.167 に答える
2

これが私の解決方法です:)

あなたのquestions/_form.html.erb

<%= form_for [@job, @question] do %>

これが機能するには、ジョブの ID が必要です。次のように渡します。questions_controller.rb

def new
  @job = Job.find(params[job_id])
  @question = @job.questions.build
end

Build( .build) は、上記のコードで new( ) を使用するのと似て.newいますが、古いバージョンの rails のみが異なります。レール 2 ダウン。

create アクションについて (まだquestions_controller.rb)

def create
  @job = Job.find(params[:job_id])
  @question = @job.questions.build(question_params)
end

これらのみを使用する場合、質問モデルの job_id および user_id フィールドは空になります。ID を追加するには、questions_controller.rb次のようにします。

def question_params
  params.require(:question).permit(:ahaa, :ohoo, :job_id)
end

次に、ユーザーの ID を渡すには (Devise を使用している場合)、次のようにします。

def create
  @job = Job.find(params[:job_id])
  @question = @job.questions.build(question_params)
  @question.user_id = current_user.id
end
于 2017-02-27T13:29:54.613 に答える