2017-01-15 6 views
0

私はRails has_many:associationを使ってRailsを使うことを学んでいます。私が読んでいるものの大部分は、モデルを設定する方法だけを提供しますが、コントローラのアクションを設定する方法は提供しません。私のアプリは、このトピックを学ぶ目的で非常に基本的です。私はいくつかの垂直的産業をリストアップしたフォームを持っています。 「縦型」を作成すると、その縦型に適用されるアプリのリスト(チェックボックス)から選択するオプションがあります。垂直が作成されると、垂直アプリと選択アプリの関連付けが確立されます。シンプルな必要Has_Many:コントローラコード

私は3つのモデルがあります。ここでは

class App < ActiveRecord::Base 
    has_many :solutions 
    has_many :verticals, through: :solutions 
end 

class Vertical < ActiveRecord::Base 
    has_many :solutions 
    has_many :apps, through: :solutions 
end 

class Solution < ActiveRecord::Base 
    belongs_to :app 
    belongs_to :vertical 
end 

は私のフォームである:ここでは

<%= simple_form_for(@vertical) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :name %> 
    <%= f.input :description %> 
    <%= f.association :apps, as: :check_boxes %> 
    </div> 

    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

は私verticals_controllerがアクションを作成することです:

def create 
    @vertical = Vertical.new(vertical_params) 
    @solutions = @vertical.apps.build(params[:app]) 
    <respond_to code omitted for brevity> 
    end 

    def vertical_params 
     params.require(:vertical).permit(:name, :description, apps_attributes: [ :name, :description, :developer, :mpp, :partner, :website, :app_id[] ]) 
    end 

Iから関連付けを作成することができていますレールは次のように操作します:

vertical = Vertical.first 
app = App.first 
vertical.apps << app 

しかし、これはコントローラーで行うのが正しい方法ではないと思いますし、フォームで選択されたアプリパラメータを取得する方法も理解できません。私は、Railsのベストプラクティスに準拠する、基本的でクリーンなコード例を探しています。また、コントローラコードに対処する最新のチュートリアルを教えていただければ幸いです。どうも。

答えて

0

私は次の変更を行うことによって作成される関連付けを得ることができた:

私の私のコントローラ内のアクションを作成中:私は、次のしている私のセキュアなパラメータで

def create 
    @vertical = Vertical.new(vertical_params) 
    @solutions = @vertical.apps.build 
    <respond_to code omitted for brevity> 
    end 

を:

def vertical_params 
     params.require(:vertical).permit(:name, :description, app_ids:[]) 
    end 

これはRailsのベストプラクティスであるかどうかはわかりません。

関連する問題