2016-06-22 10 views
0

私は2つのモデルとリソースを持っています - 研究所と管理者。同じビューを使用して2種類のリソースを作成する

2種類のリソースを作成する1つの送信ボタンが表示されます。 2つの別々のフォームが必要ですか?例が素晴らしいだろう!

また、この2つのタイプのリソースを作成する場合、どのような命名規則を使用する必要がありますか。

InstituteとAdminの間には「has-many through」の関連があります。

+0

あなたの質問は抽象的すぎます。はい、おそらく、2つのフォームが必要になります。なぜなら、おそらく、それらは異なるコントローラに根ざしているからです。一方、あなたのリソースはかなり類似していて、Userモデルとuser_typeフィールドの両方を使用する場合は、AdminやUserなどの異なるタイプしか持てません。それはすべて依存している。 –

+0

2種類のリソースの間には関係がありますか? 1-n、1-1 OR n-n? –

+0

2つのモデルはInstituteとAdminです。インスティテュートと管理者の間には「多くの関係があります」という関連があります。 – user1175969

答えて

0

希望するデザインパターンはForm Objectです。

フォームオブジェクトに

https://robots.thoughtbot.com/activemodel-form-objects

、あなたは、フォームを表すクラスを作成してデータを検証して、あなたが必要とするリソース(またはリソース)に持続することができます。

これにはVirtusという名前の宝石もあります。私にとっては、あなたが望むものがシンプルなのは残酷なことです。あなたはちょうどActiveModelモデルを作成し、あなたのものをすることができます。

0
Would I need to have 2 separate forms? 

回答はNonです。 1つのフォームをネストすることができます。あなたのこのような協会 "を通じて多くの持っている" Gessing:例:だから

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 
一つスティチュートは、多くの管理者throuth mettings

モデルを持っています

ビューは_form.erb.rbと呼ばれることがありますedit.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 %> 
関連する問題