0

YAN (またしても初心者)

レールを使用して、「学生」コントローラーと「連絡先」コントローラー、そしてもちろん学生モデルと連絡先モデルを用意しました。連絡先は生徒に属し、生徒は多くの連絡先を持っています。各学生の「連絡先を追加」をクリックするオプションを使用して、各学生をリストする学生のインデックス ページがあります。連絡先の「新しい」アクションを呼び出し、その後連絡先の「新しい」ビューを呼び出そうとすると、それが失われます。連絡先がstudent_idを認識できるように、学生および/または連絡先を初期化する方法/場所。現在、学生を new_contact_path に渡していますが、それを機能させるには、contact コントローラー内で student_Id を params(:format) として参照する必要があります。これは明らかに最善の方法ではありません。任意のアイデア以下のコード:

ContactsController:
def new
    @contact = Contact.new
    @student = Student.find(params[:format])
end

students index:
<% @students.each do |student| %>
  <tr>          
    <td><%= link_to 'Contacts', new_contact_path(student) %></td>
  </tr>
<% end %>
4

2 に答える 2

1

new_contact_path リンクで student_id を渡すことができます。

<%= link_to 'Contacts', new_contact_path(student, :student_id => student.id) %>

そしてコントローラーで

class ContactsController
  def new
    @student = Student.find(params[:student_id])
  end
end
于 2012-10-17T06:53:10.247 に答える
0

生徒を探す必要があるとき

@student = Student.find(params[:format])

あなたのルートには間違いなく何か問題があります。

ルートは次のようになります。

resources :students do
  resources :contacts
end

コードは次のようになります。

@student = Student.find(params[:student_id])

@students を適切に初期化すれば、投稿したインデックス ビューは正常に機能するはずです。

于 2012-10-17T10:55:42.330 に答える