Rails:编辑表单中的序列化数据

2024-03-02

我有一个模型,它有一个参数,即序列化哈希。我希望能够使用内置的 Rails 功能来编辑表单中的哈希值。这是almost在职的。如果您填写表单并提交,参数将被正确序列化,并且在控制器中模型将使用预期值构建。当我希望表单显示现有模型时,它就会崩溃:表单字段中没有显示任何值。

我的模型看起来像:

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

在控制器的 create 方法中:

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

因此您可以看到值已被发布。

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

<%= @search[:params][:min_square_footage] %>

我可以。

因此,如果我可以访问视图中的值,并且表单成功将数据 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 应该自动连接表单值不是吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:编辑表单中的序列化数据 的相关文章

随机推荐