Перенаправление на другой контроллер в Rails - PullRequest
4 голосов
/ 13 апреля 2010

Я пытаюсь перенаправить с одного контроллера на другой в Rails, и я получаю эту ошибку:

неопределенный метод `call 'для nil: NilClass

Код довольно прост (в методе def create):

@blog_post_comment = BlogPostComment.new(params[:blog_post_comment])

respond_to do |format|
  if @blog_post_comment.save
    flash[:notice] = 'Comment was successfully created.'
    redirect_to(@blog_post_comment.blog_post)
  else
    render :action => "new"
  end
end

Сохранение идет нормально, значение попадает в базу данных. Как я могу обойти ошибку перенаправления?

Форма:

<% form_for @blog_post_comment do |f| %>
    <%= f.hidden_field :blog_post_id %>
...

UPD:

После некоторого расследования выяснилось, что проблема была в строке respond_to do |format| в контроллере blog_post_comment. Как только я удалил его, теперь все в порядке.

1 Ответ

1 голос
/ 13 апреля 2010

Если у вас есть ассоциация, вы можете найти свой комментарий так:

@blog_post = BlogPost.find(params[:blog_post_id])
@blog_post_comment = @blog_post.comments.build(params[:blog_post_comment])

А потом

respond_to do |format|
  if @blog_post_comment.save
    flash[:notice] = 'Comment was successfully created.'
    redirect_to(@blog_post)
  else
    render :action => "new"
  end
end

Если у вас нет ассоциации, вот как вы ее устанавливаете:

В вашей модели BlogPost у вас должна быть следующая строка:

has_many :blog_post_comments

И в вашей модели BlogPostComment вы должны иметь:

belongs_to :blog_post

В route.rb у вас должно быть:

map.resources :blog_post_comment, :has_many => 'blog_post_comments'
...