我很難試圖瞭解如何允許非模型參數。RoR允許非模型參數
我讀過:
- Rails Strong Parameters: How to accept both model and non-model attributes?
- Rails 4 Strong parameters : permit all attributes?
- Strong Parameters
所以,對於一個 「正常」 的情況 - 讓我們說,我有一個具有隻是一個模型Foo
一個屬性bar
:
# foo.rb
class Foo < ActiveRecord::Base
# bar, which is a integer
end
# views/foos/new.html.erb
<%= form_for @foo do |f| %>
<%= f.number_field :bar %>
<%= f.submit %>
<% end %>
#foos_controller.rb
def create
@foo = Foo.new(foo_params)
# ...
end
#...
private
def foo_params
params.require(:foo).permit(:bar)
end
因此,當我提交表格時,將會創建Foo
。
但是,如果什麼bar
屬性有一些背後的邏輯,結合一些非模型參數?假設bar
是兩個參數的總和(bar = bar_1 + bar_2
)。然後,視圖和控制器的樣子:
# views/foos/new.html.erb
<%= form_for @foo do |f| %>
<%= f.number_field :bar_1 %>
<%= f.number_field :bar_2 %>
<%= f.submit %>
<% end %>
#foos_controller.rb
def create
bar_1 = params[:foo][:bar_1]
bar_2 = params[:foo][:bar_2]
if bar_1.present? && bar_2.present?
@foo = Foo.new
@foo.bar = bar_1.to_i + bar_2.to_i
if @foo.save
# redirect with success message
else
# render :new
end
else
# not present
end
end
所以現在的問題是,我還需要允許bar_1
和bar_2
參數?如果我這樣做,我該如何准許他們?
在第一個選項,如果我不使用'foo_params'爲創建/更新,然後方法真正需要的? – Vucko
是的。你會繼續做'Foo.new(foo_params)'。 – lcguida
想我明白了。乾杯 – Vucko