我正在学习使用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
我可以通过这种方式从rails控制台创建关联:
vertical = Vertical.first
app = App.first
vertical.apps << app
但我不认为这是在控制器中执行此操作的正确方法,也不了解如何获取在表单中选择的应用程序参数。我正在寻找一些遵循Rails最佳实践的基本,干净的代码示例。另外,如果你能指出我最近的任何解决控制器代码的教程都会很棒。 THX。
答案 0 :(得分: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最佳实践相关。