1

属性 (すべてが必須ではない) を持つユーザー モデルがあり、first_name、last_name、誕生日、職業、pet_name があります。

登録するには、ユーザーは first_name と birthday を入力する必要があります。

どういうわけか、nil の属性 (この場合は last_name と職業) を取得し、そのうちの 1 つをランダムに選択して、ユーザーに入力を求めるフォームを作成したいと考えています。

そうすれば@user.attributes.map{|k,v| v==nil ? k : nil}.compact、nil の属性を取得できます。

このメソッドを任意の属性で使用できるように、フォームを十分に汎用的にするにはどうすればよいですか?

4

1 に答える 1

3

コントローラー アクションに @field を入力して追加フィールドのフォームを表示し、そのフィールドのフォームを表示できます。

# controller action
def additional_form
  @field = @user.attributes.select{|k,v| v.nil?}.keys.sample

  if request.post?
    @user.update_attributes(params[:user]) and redirect_to root_path
  end
end

# view for this action (additional_form.html.erb)
<%= form_for @user do |f| %>
  <%= f.text_field @field %>
  <%= f.submit %>
<% end %>
于 2012-10-22T14:53:44.280 に答える