這發生在我身上好幾次了,我還沒有找到一個可接受的解決方案。在Ruby on Rails中運行另一個控制器操作
我在一個網站的主頁上有一個窗體,它指向另一個控制器,它實際上處理數據。當表單提交成功後,另一個控制器會發送回到主頁,並帶有一個不錯的flash [:notice]消息,這就是結束了。
當出現驗證問題時,它就成了問題。我想要做的是顯示帶有驗證錯誤的表單。通常提到的天真的解決方案是您可以渲染另一個模板,但顯示主頁不僅僅是渲染模板,它還有很多功能。渲染該模板的唯一方法是在此其他控制器操作中複製和粘貼功能,或者可能將所有功能從控制器中分離出來,這不是很好,或者
有更好的解決方案嗎?
更新:我明白有人說控制器操作應該更小,並調用另一種方法,但在實踐中,我看不到如何實現它。我要從我做的一個網站上發佈一個真實的例子。
有兩種模型和控制器:帖子和評論。一個職位有很多原因。一個後顯示是這樣的:
def index
set_posts # sets @posts
end
def show
@post = Post.find_by_slug(params[:id])
@comment = Comment.new
if not @post
flash[:error] = "'#{params[:id]}' does't exist"
set_posts
render :action => :index, :status => :not_found
end
end
private
def set_posts
@posts = Posts.get_all_public_posts
end
的意見控制器只有創建操作:
def create
@comment = Comment.new(params[:comment])
@comment.post = Post.find_by_slug params['post_id']
if not @comment.post
# Now what?
# We should here call PostsController.set_posts and render views/posts/index
end
if @reason.save
flash[:notice] = 'Thank you for your message.'
redirect_to(@reason.item)
else
# Now what?
# We should here call PostsController.show without overriding the @comment
end
end
末
的 「?現在是什麼」部分是我沒有很好的解決方案。
不同之處在於,渲染已包含在主頁操作中的表單需要很多控制器邏輯。 – EmFi 2010-02-25 05:26:04
重新渲染表格丟失了家庭控制器操作中的大約25行代碼。 – Pablo 2010-02-25 05:26:53