我有一个模型,其中有一个是序列化哈希的参数。我希望能够使用内置的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] %>
我可以。
因此,如果我可以访问视图中的值,并且表单成功地将数据发送到我的控制器,为什么我的表单不能显示数据呢?
答案 0 :(得分:0)
这有效:
<%= 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应该自动连接表单值不应该吗?
答案 1 :(得分:0)
我认为您需要一个对象 - 方法关系,以便在表单中默认填充值。 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 %>