2013-11-18 4 views
0

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

То, что я до сих пор:

Модель листинга, которая включает в себя:

has_many :comments 

комментарий модель, которая включает в себя:

belongs_to :listing 

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

class CommentsController < ApplicationController 

def create 

    @listing = Listing.find(params[:listing_id]) 

    @comment = @listing.comments.build(params[:body]) # ***I suspected that I needed to pass :comment as the params, but this throws an error. I can only get it to pass with :body *** 

respond_to do |format| 

    if @comment.save 

    format.html { redirect_to @listing, notice: "Comment was successfully created" } 

    format.json { render json: @listing, status: :created, location: @comment } 

    else 

    format.html { render action: "new" } 

    format.json { render json: @comment.errors, status: :unprocessable_entity } 

    end 
    end 
end 
end 


def comment_params 
    params.require(:comment).permit(:body, :listing_id) 
end 

a d, наконец, вид листинг, который включает следующий код для сбора и отображения комментариев:

 <div class="form-group"> 
      <%= form_for [@listing, Comment.new] do |f| %> 
      <%= f.label :comments %> 
      <%= f.text_area :body, :placeholder => "Tell us what you think", class: "form-control", :rows => "3" %> 
      <p><%= f.submit "Add comment", class: "btn btn-primary" %></p> 
      <% end %> 
     </div> 

     <%= simple_form_for [@listing, Comment.new] do |f| %> 
     <p> 
     <%= f.input :body, :label => "New comment", as: :text, input_html: { rows: "3" } %> 
     </p> 
     <p><%= f.submit "Add comment", class: "btn btn-primary" %></p> 
     <% end %> 

Комментарий окно корректно отображать в представлении, и я в состоянии представить свои замечания, однако представляется, что: тело ISN 't быть сохраненным, и поэтому «представленные x минуты назад» - единственное, что появляется в разделе моих комментариев.

Любые идеи о том, что я мог делать неправильно? Я подозреваю, что это проблема с параметрами, но не смогла ее решить.

Спасибо!

ответ

1

Поскольку вы используете парадигму strong_parameters в Rails 4, я думаю, вы должны изменить линию создания комментариев к этому:

@comment = @listing.comments.build(comment_params) 

И я бы изменить список ознакомительных линии к этому:

@listing = Listing.find(params.permit(:listing_id)) 

Он должен работать нормально, если вы правильно настроили все необходимые параметры в методе comment_params.

+1

Большое спасибо за помощь! Проблема была решена с помощью @comment = @ listing.comments.build (comment_params) Изменение поиска в листинге забросило ошибку, поэтому потребовалось изменение только комментариев_parms. – dmt2989