Rails: сопоставление идентификатора комментария с определенным идентификатором микросообщения - PullRequest
0 голосов
/ 27 февраля 2012

В настоящее время у меня есть комментарий, который относится к микросообщению, но проблема в том, что когда пользователь создает комментарий, комментарий сохраняется в базе данных с идентификатором микросообщения, но идентификатор не для конкретного микросообщения, а кажется как будто комментарий только что увеличил идентификатор микросообщений на +1. Очень запутанный и очень признателен за любую помощь. Спасибо!

Комментарий модели

class Comment < ActiveRecord::Base
  attr_accessible :content, :user_id, :micropost_id
  belongs_to :micropost
  belongs_to :user

  validates :content, presence: true, length: { maximum: 140 }


  default_scope order: 'comments.created_at DESC'
end

Модель Micropost

class Micropost < ActiveRecord::Base
  attr_accessible :title, :content, :view_count
  belongs_to :user
  has_many :comments
  accepts_nested_attributes_for :comments
end

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

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

Форма

<div class="CommentField">
<%= form_for ([@micropost, @micropost.comments.new]) do |f| %>
<%= f.text_area :content, :class => "CommentText", :placeholder => "Write a Comment..." %>
<div class="CommentButtonContainer">
<%= f.submit "Comment", :class => "CommentButton b1" %>
</div>
<% end %>
</div>

Маршруты

  resources :microposts do
    resources :comments
  end

Raked Routes

micropost_comments     GET    /microposts/:micropost_id/comments(.:format)          comments#index
                       POST   /microposts/:micropost_id/comments(.:format)          comments#create
 new_micropost_comment GET    /microposts/:micropost_id/comments/new(.:format)      comments#new
edit_micropost_comment GET    /microposts/:micropost_id/comments/:id/edit(.:format) comments#edit
     micropost_comment GET    /microposts/:micropost_id/comments/:id(.:format)      comments#show
                       PUT    /microposts/:micropost_id/comments/:id(.:format)      comments#update
                       DELETE /microposts/:micropost_id/comments/:id(.:format)      comments#destroy

1 Ответ

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

Я думаю, проблема в том, сколько работы вы вкладываете в это. Rails создан, чтобы знать о большинстве из этого, без необходимости делать то, что вы делаете. Мое предложение было бы изменить контроллер комментариев на что-то вроде этого

class CommentsController < ApplicationController 
  def create
    @comment = Comment.new(params[:comment])
    @comment.save 
      respond_to do |format|
      format.html 
      format.js
    end
  end
end

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

"комментарии / форма",: locals => {: micropost => micropost}%>

и ваша форма на что-то вроде этого

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

Во всех моих приложениях rails это все, что мне нужно было сделать, чтобы правильно назначить идентификаторы. Я уверен, что это решит проблему.

...