我对Rails很新,所以也许我只是错过了“Rails方式”这样做,但我有一个模型,称之为Post
。我可以从规范posts/new
页面创建帖子,也可以从其他页面创建帖子,例如home/index
。
在home/index
我有一个form_for @post
(与posts/new
略有不同,但我说可以使用部分)。问题是在PostController.create
我无法将新创建的@post对象传递回home/index
(如果有错误),因为:
posts/new
posts/new
或home/index
)redirect_to :back
),redirect_to也不会传回对象,因此从home/index
有任何帮助吗?感谢
修改
也许一个可能的解决方案是从请求中获取调用控制器/操作并将其呈现回来。有什么办法吗?
答案 0 :(得分:0)
理论上,你可以通过检查引用来实现你想要做的事情:
def create
@post = Post.new
if @post.update_attributes(params[:post])
# redirect as appropriate
else
render :action => case request.referer
when new_post_path then "posts/new"
when "/" then "home/index" # assuming that home/index is the root of the site
end
end
end
答案 1 :(得分:0)
要获取引荐来源页面,您可以创建一个名为redirect
的隐藏字段。您可以在控制器中使用它。
redirect_to params[:redirect] || posts_path
您是否尝试过将查询字符串中的帖子ID传递给home/index
例如:/home/index?post_id=42
答案 2 :(得分:0)
您可以通过查看
找出谁调用了您的信息页request.referrer
我不知道这是否是“轨道方式”,但这是我的解决方案。
您可以为
添加路线match home/index/(:id) => "home#index"
并在创建Post
后重定向到此。然后在您的Home
控制器index
操作中执行操作
@Post = Post.find(params[:index]) if params[:index]
如果@Post
存在,您的视图应显示帖子
我喜欢这种方法,因为它将所有逻辑保留在应有的位置。控制器中的路由逻辑和视图中的视图逻辑。