`acceptpts_nested_attributes_for`, но изменить только первый дочерний элемент - PullRequest
0 голосов
/ 12 мая 2011

Краткая справка

Я создаю обычный форум для изучения / практики Rails.

User Model
  has_many :topics
  has_many :posts

Topic Model
  has_many :posts
  belongs_to :user

Post Model
  belongs_to :user
  belongs_to :topic

Однако, когда пользователь создает новую тему, я также хочу, чтобы он одновременно создал первое сообщение в этой теме (точно так же, как работают форумы). Кроме того, когда создатель темы редактирует тему, он также редактирует первое сообщение.

Итак, я добавил accepts_nested_attributes_for :posts к модели темы.

# TopicController
def new
  @topic = current_user.topics.new
  @topic.posts.build
end

А вот вложенная форма:

# topics/_form
<%= form_for [@topic] do |topic| %>
  <%= topic.text_field :name %>
  <% topic.fields_for :posts do |post| %>
    <%= post.text_area :content %>
  <% end %>
<% end %>

Вопрос

Этот код работает. Пользователь создаст первое сообщение вместе с созданием темы.

Однако, поскольку другие пользователи создают сообщения для темы, а @topic.posts расширяется, когда создатель темы редактирует тему, текстовые области для каждого сообщения в теме кажутся создателями темы редактируемыми.

Как я могу сделать так, чтобы Создатель Тем мог видеть и редактировать только первый пост Темы в форме views/topics/_form ??

1 Ответ

0 голосов
/ 12 мая 2011

Полезный ресурс: http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

Создано новое частичное рядом с topics/_form под названием _edit_form только для действия topics#edit.

Читая документацию по API (см. Рисунок), я обнаружил, что вы можете указать экземпляр для forms_for:

<%= form_for @topic do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.fields_for :posts, ---->@post<---- do |p| %>
        <%= p.text_area :content %>
    <% end %>
  </p>
  <p><%= f.submit %></p>
<% end %>

В контроллере тем:

def edit
  @topic = ...
  @post = @topic.posts.first
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...