Rails form_for модель в другом контроллере - PullRequest
2 голосов
/ 12 сентября 2010

У меня есть следующие классы моделей:

class Upload < ActiveRecord::Base
   ...
   has_many   :reviews, :order => "created_at DESC"
   ...
end

class Review < ActiveRecord::Base
  ...
  belongs_to :upload
  belongs_to :user
  validates_presence_of :description
  ...
end

В моем представлении загрузки / показа есть форма для захвата обзора для конкретной загрузки:

<% form_for(@review) do |f| %>
  <%= f.error_messages %>
  ...
  <p>
    <%= f.text_area :description, :rows => 5, :cols => 80 %>
  </p>
  ...
  <p>
    <%= f.submit 'Submit Review' %>
  </p>
<% end %>

При сбое проверки рецензии, как отобразить сообщения об ошибках в форме рецензии, являющейся частью представления загрузки / показа?

Мой ReviewController делает это:

def create @review = current_user.reviews.new (params [: обзор])

 if @review.save
   flash[:notice] = 'Review was successfully created.'
   redirect_to( @review.upload )
 else
   render :action => :new
 end

конец

Очевидно, render :action => :new не работает, потому что мне нужно отобразить действие show в UploadsController, а не новое действие ReviewsController.

Я почти уверен, что есть простой способ сделать это, я просто не могу понять это!

1 Ответ

2 голосов
/ 12 сентября 2010

Ваше действие контроллера рецензирования должно получать params['upload_id'], чтобы связать рецензию с ее загрузкой, либо через URL (если рецензии являются вложенным маршрутом, например POST /uploads/1/reviews), либо из скрытого поля.

Вы можете использовать render :template для перенаправления:

def create
  @review = current_user.reviews.new(params[:review])
  @upload = Upload.find(params['upload_id'])
  @review.upload = @upload
  if @review.save
    flash[:notice] = 'Review was successfully created.'
    redirect_to( @upload )
  else
    flash[:error] = 'Review could not be created.'
    render :template => 'uploads/show'
  end
end

Также допустимо просто визуализировать форму для рецензирования (т. Е. По умолчанию «reviews / new») до тех пор, пока запись формы не будет правильной, вместо отображения всей страницы для загрузки.

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