Ruby on Rails: несколько полей ввода в одной форме - Изменить идентификатор / значение - PullRequest
1 голос
/ 21 декабря 2011

Есть страница, где есть несколько полей ввода одной и той же вещи, сообщения. Прямо сейчас, когда пользователь вводит вопрос, скажем, о 3 полях, единственное, которое сохраняет в базу данных, является последним. Принимая во внимание, что он должен сохранить все три и дать каждому свой post_id. Также; если пользователь не вводит ничего для других полей, он также не должен сохранять данные в базе данных.

new_step_4_html.erb

<%= form_for(@post) do |f| %>
  <%= f.text_field :content %>
  <%= f.text_field :content %>
  <%= f.text_field :content %>
<% end %>

projects_controller.rb

def new_step_4
  @post = Post.new
end

Прямо сейчас все, что он делает, это отправляет одно: поле содержимого, очевидно, потому что все они имеют один и тот же идентификатор / значение. К сожалению, Railscasts # 197 применяется для вложенных форм, так что все, что он делает, - это javascript и вспомогательные материалы, которые применяются для вложенных форм. Я думаю, это что-то простое. Человек из IRC упомянул, что я могу сделать какой-то код «3 раза» в файле представления или что-то в этом роде?

1 Ответ

3 голосов
/ 21 декабря 2011

Прежде всего вам, вероятно, придется отредактировать модель вашего поста.

post.rb

has_many :contents, :dependent => :destroy
accepts_nested_attributes_for :contents

Вам понадобится другая модель для хранения полей контента.поэтому сначала создайте модель

rails g model content post_id:integer body:text

модель

content.rb

belongs_to  :post

Теперь вместо выполнения <% = f.text_field: content%>несколько раз, позвольте рельсам создавать их, потому что теперь вы в основном позволяете им перезаписывать друг друга.

3.times do
  content = @post.content.build
end

представление формы будет примерно таким:

<%= form_for @post do |f| %>
  <%= f.fields_for :contents do |builder| %>
    <%= builder.label :body, "Question" %><br />
    <%= builder.text_area :body, :rows => 3 %><br /> 
  <%= end %>     
  <p><%= f.submit "Submit" %></p>
<% end %>

Я не проверялэтот код, но идея должна быть правильной.Дайте мне знать, если вам нужно больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...