1

假设我有三个模型来表达一个员工编程语言的经验,Language 是一个主表,员工不能编辑,只能由管理员用户操作。

class Employee
  has_many :experiences
  has_many :languages, through: :experiences
end

class Language
  has_many :experiences
  has_many :employees, through: :experiences

end

class Experience
  belongs_to :employee
  belongs_to :language

  attr_accessible :employee_id, :language_id, :duration
end

我希望能够编辑表单上经验的属性持续时间,有一个复选框来建立关联本身,以及一些经验输入。

已编辑

我不想要动态嵌套属性解决方案,但是像这样,我想以复选框格式显示所有关联选项,而不是下拉菜单。

在此处输入图像描述

我知道这与往常不同,但有 UI 约束需要它。

4

1 回答 1

0

我建议您使用嵌套模型,例如,如果您正在编辑员工信息,您可以添加经验(语言和持续时间)。

检查这些 RailsCasts http://railscasts.com/episodes?utf8=%E2%9C%93&search=nested+model

您必须编辑您的 Employee 模型,以便它可以接受嵌套模型(在本例中为 Experience),并且您必须允许对 Experience 的属性进行批量分配。这边走:

员工

attr_accessible :experiences_attributes
accepts_nested_attributes_for :experiences, allow_destroy: true 

对于意见:

表格:

<%= simple_form_for @employee do |f| %>    
  <%= f.input :name %>

  <hr />

  <h3>Experience</h3>

  <%= f.simple_fields_for :experiences do |pf| %>
     <%= render 'experience_fields', f: pf %>
  <% end %>

  <%= link_to_add_fields "New employee experience", f, :experience %>

  <hr />

  <div>
    <%= f.button :submit %>
  </div>
<% end %>

部分经验字段

<fieldset>
    <%= f.association :language %>
    <%= f.input :duration %>

    <%= f.hidden_field :_destroy %>
    <%= link_to "Remove", '#', class: "remove_fields" %>
</fieldset>

检查 RailsCasts,特别是http://railscasts.com/episodes/196-nested-model-form-part-1http://railscasts.com/episodes/197-nested-model-form-part-2,以及如果您有高级帐户,请检查http://railscasts.com/episodes/196-nested-model-form-revised

请记住添加视频中解释的 Javascript 函数和帮助程序。

另外,请观看:https ://github.com/nathanvda/cocoon/wiki/A-guide-to-doing-nested-model-forms

于 2013-04-12T15:19:44.073 回答