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 %>