我有2个模型(和资源) - 学院和管理员。
我希望有一个带有1个提交按钮的视图,可以创建2种类型的资源。我需要2个单独的表格吗?一个例子就是很棒!
此外,此视图应使用哪种命名约定(假设它创建了2种类型的资源)。
学院和管理员之间存在“有很多共同点”的关联。
答案 0 :(得分:0)
您想要的是名为Form Object
的设计模式。
https://robots.thoughtbot.com/activemodel-form-objects
使用表单对象,您可以创建表示表单的类,验证数据,然后持久保存到您需要的资源(或资源)。
还有一个名为Virtus的宝石。对我来说,如果你想要的东西很简单,那就太过分了。您可以创建一个ActiveModel
模型并完成您的工作。
答案 1 :(得分:0)
Would I need to have 2 separate forms?
答案是非。你可以把一个表格嵌套。
例如:Gessing your"有很多通过"像这样的协会:一个学院有许多管理员通过会议
模特:
class Institute < ActiveRecord::Base
has_many :mettings
has_many :admins, :through => :mettings
accepts_nested_attributes_for :mettings
end
class Admin < ActiveRecord::Base
has_many :mettings
has_many :institues, :through => :mettings
accepts_nested_attributes_for :mettings
end
class Metting < ActiveRecord::Base
belongs_to :institue
belongs_to :admin
accepts_nested_attributes_for :institues
end
控制器:
def new
@institue= Institue.new
@metting= @institue.mettings.build
@admin = @metting.build_admin
end
def create
Institue.new(institue_params)
end
def institue_params
params.require(:institue).permit(:id, mettings_attributes: [:id, :metting_time, admin_attributes: [:id ] )
end
视图可以在edit.erb.rb中包含_form.erb.rb:
<% form_for(@institue) do |institue_form| %>
<%= institue_form.error_messages %>
<p>
<%= institue_form.label :name, "Institue Name" %>
<%= institue_form.text_field :name %>
</p>
<% institue_form.fields_for :mettings do |metting_form| %>
<p>
<%= metting_form.label :metting_date, "Metting Date" %>
<%= metting_form.date_field :metting_date %>
</p>
<% metting_form.fields_for :admin do |admin_form| %>
<p>
<%= admin_form.label :name, "Admin Name" %>
<%= admin_form.text_field :name %>
</p>
<% end %>
<% end %>
<p>
<%= institue_form.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', institues_path %>