控制器之间的rails变量

时间:2012-10-17 06:36:29

标签: ruby-on-rails ruby variables activerecord parameters

Y.A.N(又一个新手)

使用rails,我有一个'学生'控制器和一个'联系人'控制器,当然还有学生模型和联系模式。联系belongs_to学生和学生has_many联系人。我有一个学生索引页面,列出每个学生可以选择为每个学生单击“添加联系人”。当我尝试将联系人的“新”动作和随后的“新”视图称为联系人时,我正在失去它。我如何/在何处初始化学生和/或联系人,以便联系人知道student_id。现在,我正在将学生传递给new_contact_path但是我必须在接触控制器内将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 %>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当您需要找到

的学生时
@student = Student.find(params[:format])

你的路线肯定有问题。

您的路线应该是:

resources :students do
  resources :contacts
end

你的代码应该是:

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

如果您正确初始化@students,您发布的索引视图应该可以正常工作。