2010-09-12 21 views
2

模型我有以下的模型類:的Rails的form_for在不同的控制器

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做到這一點:

高清創建 @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不會因爲我的工作需要顯示UploadsController的show動作,而不是ReviewController的新動作。

我很確定有一個簡單的方法來做到這一點,我只是無法弄清楚!

回答

2

您的評論控制器操作應該收到params['upload_id'],以通過網址(如果評論是嵌套路線(如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 

這也是可以接受的本身只是呈現形式審查(即默認「的評論/新」),直到形式進入是正確的,而不是顯示整個頁面的上傳。