Ich habe eine harte Zeit zu versuchen, zu verstehen, wie man nicht-Modell-Parameter zu ermöglichen.RoR erlaubt nicht Modell Parameter
Ich habe gelesen:
- Rails Strong Parameters: How to accept both model and non-model attributes?
- Rails 4 Strong parameters : permit all attributes?
- Strong Parameters
Also, für eine "normale" Situation - lassen Sie uns sagen, dass ich ein Modell Foo
haben, die gerade hat ein Attribut 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
Also, wenn ich das Formular abschicken, wird die Foo
erstellt.
Was aber, wenn das Attribut bar
eine gewisse Logik dahinter ist, dass kombiniert einige nicht Modellparameter? Nehmen wir an, dass bar
die Summe zweier Parameter ist (bar = bar_1 + bar_2
). Dann wird die Ansicht und Controller wie folgt aussieht:
# 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
Die Frage ist also, kann ich auch die bar_1
und bar_2
Parameter erlauben müssen? Wenn ich es tue, wie erlaube ich ihnen?
In der ersten Option, Wenn ich nicht verwenden 'foo_params' für die erstellen/aktualisieren, ist das Verfahren dann wirklich benötigt? – Vucko
Ja. Du würdest weiterhin 'Foo.new (foo_params)' machen. – lcguida
Ich denke, ich habe es.Prost – Vucko