Rails选择表单:如何填充方法参数

时间:2017-03-14 17:39:24

标签: ruby-on-rails select erb

感谢您的阅读,我不知道如何编写选择框的Rails表单助手的方法参数。

假设我有以下类:

class School
  attr_accessor :students
  def initialize
    students = []
  end
end

class Student
    attr_accessor :teacher
    atrr_accessor :student_name
end

class Teacher
    attr_accessor :teacher_name
end

@teacher_list = ['Smith', 'Jones', 'Brown','White']

我希望有一个选择框,显示每个学生都有哪位老师,并允许我选择不同的老师。我希望能够解析生成的params并发送到控制器,以防我需要更新它,但我也希望显示正确的值来选择。

我不知道如何编写方法参数,以便选择正确的值来显示为选中,我这样做:

<%= form_for :school, url: update_path do |f| %>
  <% school.students.each do |student| %>
  <% f.select("[students]#{student.student_name}[teacher][teacher_name]" options_for_select(@teacher_list),{prompt => 'Select Teacher for student'}) %>
<% end %>

这显然是错误的,但我希望能够以一种我可以轻松解析它的方式生成params哈希。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

我刚刚做过这个。我为此创建了一个表,表是角色,模型是角色。

用户模型对很多角色都有很多不足之处。这意味着许多用户可以拥有不同的角色,每个角色可以拥有不同的用户,但一对多的关系(has_many :roles)就足够了

has_and_belongs_to_many :roles

角色模型

has_and_belongs_to_many :users

我创建了一个额外的表roles_users来管理用户和角色之间的连接关系。

create_table(:roles_users) do |t|
    t.belongs_to :role, index: true
    t.belongs_to :user, index: true
end

这是表单,选择表单的值是使用Role.all.collect计算的。

<%= form_for @user |f| %>
<%= f.select(:roles_id, Role.all.collect {|p| [ p.role, p.id ]}, {:selected => @user.roles_id}, {:class => "form-control"}) %>

我就是这样做的,在接下来的几天里,我可能有时间来回顾这个问题并加以改进。我希望它对你有所帮助。 对不起,如果不是很好

由于

的Fabrizio