2017-01-15 67 views
0

我正在學習使用Rails has_many:通過關聯。我正在閱讀的大部分內容僅提供瞭如何設置模型,但不提供如何設置控制器操作。爲了學習這個主題,我的應用程序非常基礎。我有一份列出一些垂直行業的表格。創建「垂直」時,可以從適用於該垂直的應用程序列表中進行選擇(複選框)。垂直創建時,應該建立垂直和所選應用程序之間的關聯。需要簡單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 

我能夠從創建協會軌道控制檯這種方式:

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的最佳實踐或不。