0

私は多数のプロジェクトに取り組んできました。そこでは、HTML フォーム内の新しいオブジェクトの属性の設定と呼び出し時の両方を見てきました。Model.new(foo: 'bar')

「ベストプラクティス」の方法でこれを行う正しい方法はどれですか?

形:

<%= form_for User.new, remote: true do |f| %>
  <%= f.hidden_field :foo, value: "bar" %>
  <%= f.text_field :email %>
<% end %>

インスタンス変数:

#Obviously this is set in the Controller    
@user = User.new(foo: "bar")

<%= form_for @user, remote: true do |f| %>
  <%= f.text_field :email %>
<% end %>
4

2 に答える 2

1

最初のケースでは、ユーザーの検証に合格しなかった場合、空のフォームがレンダリングされ、2 番目のケースでは、フィールドが入力されたフォームがレンダリングされます。これは、コントローラーのインスタンス変数 @user が入力された値を保持するためです。

したがって、2 番目のバリアントを使用することをお勧めします。

于 2013-08-07T13:43:04.210 に答える
0

私はフォームが部分的なフォームであることを好みます。このようにして、新規と編集を複製しません。

_form.html.erb

<%= form_for user, remote: true do |f| %>
  <%= f.text_field :email %>
<% end %>

これにより、レンダリングするユーザーを送信できます。

したがって、new.html.erb で

<%= render partial: 'form', locals: {user: @user} %>

しかし、それはすべてコントローラーに帰着します:

def new
  @user = User.new
end

def edit
  @user = User.find(params[:id])
end
于 2013-08-07T13:44:48.437 に答える