Rails: сохранение идентификатора поста в таблице комментариев в БД - PullRequest
1 голос
/ 26 февраля 2012

У меня есть модель комментария, и я хочу сохранить post.id, который я комментирую, в таблице комментариев в БД в разделе post_id. Пока мой код для контроллера комментариев установлен как

комментарий контроллер

class CommentsController < ApplicationController 
  def create
    @comment = Comment.new(params[:comment])
    @comment.user_id = current_user.id
    *@comment.micropost_id = Micropost.find(params[:id])*
    @comment.save 
      respond_to do |format|
      format.html 
      format.js
    end
  end
end

@comment.micropost_id = Micropost.find(params[:id]) Это то, что у меня есть сейчас, но я не уверен, как связать это с формой заказа для получения post.id. Форма:

Форма

<div class="CommentField">
<%= form_for @comment, :remote => true do |f| %>
<%= f.text_area :content, :class => "CommentText", :placeholder => "Write a Comment..." %>
<div class="CommentButtonContainer">
<%= f.submit "Comment", :class => "CommentButton b1" %>
</div>
<% end %>
</div>

Мой друг сказал мне добавить ссылку на кнопку отправки, чтобы подключить ее к нужному маршруту, чтобы забрать post.id, но я также не уверен в этом. Мой маршрут в настоящее время:

Маршрут

  resources :microposts do
    resources :comments
  end

  match "/microposts/:id/comments" => "microposts#comments"

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Проверить, используя вложенные формы ... http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

или просто используйте

form_for [@post, @comment] do |f|
...

Вы слишком усложняете вещи на своих маршрутах тоже

resources :microposts do
  resources :comments
end

- это все, что вам нужно для того, чтобы эта работа работала (т.е. забудьте дополнительную строку match. Попробуйте запустить rake routes, чтобы увидеть все прекрасные URL-адреса, которые вам дали ваши вложенные маршруты.

В вашем контроллере начните с поиска Микросообщений

def create
  @micropost = Micropost.find(params[:micropost_id])
  @comment = @micropost.comments.build(params[:comment])
  ..

Имеет смысл? В документации API есть длинное, но хорошее введение http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

1 голос
/ 26 февраля 2012

вам просто нужно поместить скрытый ввод в форму, как это

<%= form_for @comment, :remote => true do |f| %>


<input type="hidden" name="micropost_id" value="<%= params[:id] %>" />


<%= f.text_area :content, :class => "CommentText", :placeholder => "Write a Comment..." %>
<div class="CommentButtonContainer">
<%= f.submit "Comment", :class => "CommentButton b1" %>
</div>
<% end %>

и в контроллере:

class CommentsController < ApplicationController 
  def create
    @comment = Comment.new(params[:comment])
    @comment.user_id = current_user.id
    @comment.micropost_id = params[:micropost_id]
...