rails:在表单中编辑序列化数据

我有一个模型有一个序列化哈希的参数。 我希望能够使用内置的railsfunction在表单中编辑哈希。 它几乎正常工作。 如果填写表格并提交,则参数序列化正确,并且在控制器中,模型使用预期值构建。 它崩溃的地方是我希望表单显示现有模型:表单字段中没有显示任何值。

我的模型看起来像:

class Search < ActiveRecord::Base serialize :params end 

forms:

     10, :placeholder => "Min" %>  10, :placeholder => "Max" %>  ...  

并在控制器的创建方法:

 @search = Search.new(params[:search]) @search.params ||= Hash.new logger.info("search = #{@search.inspect}") 

在日志中:

 search = #"1200", "max_square_footage"=>"1500"}, created_at: nil, updated_at: nil> 

所以你可以看到值被POST。

在我看来,在表单上方,我添加了这一行,看看我是否至少可以访问这些值:

  

我可以。

因此,如果我可以访问我的视图中的值,并且表单成功将数据POST到我的控制器,为什么我的表单不能显示数据?

这工作:

 <%= p.text_field :min_square_footage, :size => 10, :placeholder => "Min", :value => @search[:params][:min_square_footage] %> <%= p.text_field :max_square_footage, :size => 10, :placeholder => "Max", :value => @search[:params][:max_square_footage] %> 

但并不理想。 rails应该自动连接表单值不应该吗?

我认为你需要一个对象 – 方法关系,默认情况下在表单中填充值。 Rails调用这些方法来填充表单。 您可以在搜索模型中为这两个数据min_square_footage和max_square_footage编写方法

 class Search < ActiveRecord::Base serialize :params def min_square_footage params[:min_square_footage] unless params.blank? end def max_square_footage params[:max_square_footage] unless params.blank? end end 

并在意见中:

 <%= form_for @search do |f| %> <%= f.label :square_footage, "Square Footage:" %> <%= f.text_field :min_square_footage, :size => 10, :placeholder => "Min" %> <%= f.text_field :max_square_footage, :size => 10, :placeholder => "Max" %> ... <% end %>