How to set up form for a hash in Rails?

百般思念 提交于 2019-12-04 11:31:40

问题


I have some data associated with a model that is in a hash. The hash is generated in the controller: @hash.

What is the proper way to create a form for this data?

I came up with the following code for the view:

  <% @hash.keys.each do |key| %>
    <div class="field">
      <%= f.label key %><br />
      <%= text_field_tag "hash_" + key, @hash[key] %> 
    </div>
  <% end %>

This generates the form, but it creates each hash item as a separate variable in the form. This doesn't seem to be the proper way to submit the data back. I would like to get the data back as a hash, and access it with params[:hash].

What is the best way to do this?

Working in Rails 3.07, Ruby 1.9.2.

Thanks.

EDIT: I should have made this clear. This code is inside of a form generated for a model. So, the form needs to submit all the fields for the model, plus the above hash.


回答1:


Based on this article you should change the name in text_field_tag to

<% @hash.keys.each do |key| %>
  <div class="field">
    <%= f.label key %><br />
    <%= text_field_tag "hash[" + key + "]", @hash[key] %> 
  </div>
<% end %>



回答2:


My answer is not strictly on topic but I really recommend you to take a look at http://railscasts.com/episodes/219-active-model. You could use ActiveModel APIs to simulate a model object with Rails 3. Doing that you could simply do something like

<%= form_for(@object) %>

and leaving the populating of your object to Rails APIs.




回答3:


When you use the helpers that end with _tag that's what happens.

Instead of text_field_tag ... use f.text_field ....

In order to get a hash like params => {:hash => {:field1 => "", :field2 => ""}} you have to pair up form_for with f.input_field_type instead of simply input_field_tag.

See the difference?



来源:https://stackoverflow.com/questions/7521328/how-to-set-up-form-for-a-hash-in-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!