シリアル化されたハッシュという1つのパラメータを持つモデルがあります。私はレールの機能を内蔵したフォームでハッシュを編集できるようにしたい。 ほぼです。フォームに記入して提出すると、パラメータは正しくシリアル化され、コントローラでモデルは期待値で構築されます。それが崩れるところは、フォームに既存のモデルを表示させたい場合です。値はいずれもフォームフィールドに表示されません。rails:シリアル化されたデータをフォームで編集する
私のモデルは次のようになります。
class Search < ActiveRecord::Base
serialize :params
end
とフォーム:
<%= form_for @search do |f| %>
<%= f.fields_for :params, @search.params do |p| %>
<%= p.label :square_footage, "Square Footage:" %>
<%= p.text_field :min_square_footage, :size => 10, :placeholder => "Min" %>
<%= p.text_field :max_square_footage, :size => 10, :placeholder => "Max" %>
<% end %>
...
<% end %>
、コントローラの作成方法で:ログに
@search = Search.new(params[:search])
@search.params ||= Hash.new
logger.info("search = #{@search.inspect}")
:
search = #<Search id: nil, params: {"min_square_footage"=>"1200", "max_square_footage"=>"1500"}, created_at: nil, updated_at: nil>
これで値がPOSTされるのがわかります。
<%= @search[:params][:min_square_footage] %>
そして私は次のことができます。私の見解で
は、フォームの上に、私は、少なくとも値にアクセスできるかどうかを確認するために、この行を追加しました。
私のビューの値にアクセスでき、フォームが正常にコントローラにPOSTすると、フォームにデータが表示されないのはなぜですか?
は私の検索モデルのフィールドです。私はまだ貯蓄を心配していません。私は "@ search.params [:min_square_footage] = 1000"のような値でモデルをプリロードしました。その値はフォームに表示されません。 – emh