比如说我有两个模型,帖子和类别。现在说我想这样做,所以从类别显示页面你可以使用form_for方法创建一个新的帖子。为此,您显然需要访问@category变量和帖子的新实例(@post)。这是控制器中可接受的代码吗?
#app/controllers/categories_controller.rb
def show
@category = Category.find(params[:id])
@post = Post.new
end
或者在一个控制器动作中定义两个实例变量是不好的做法 - 如果是,那么这样的案例的最佳做法是什么?
答案 0 :(得分:1)
我通常会这样做:
#app/controllers/categories_controller.rb
helper_method :category
helper_method :post
def show
end
private
def category
@_category ||= params[:id] ? Category.find(params[:id]) : Category.new(params[:category])
end
def post
@_post ||= Post.new(params[:post])
end
然后,在您的观看中,只需引用post
或category
(不是@post
或@_post
)。好处是您可以从新的,删除等方法中删除相同的逻辑......
答案 1 :(得分:0)
与帖子相关的动作应尽可能在PostsController中。
让我们说用户正在查看类别" rails":/categories/rails
该页面上有一个按钮,用于在" rails"下创建一个新帖子。 category,href:/posts/new?category=rails
这将带您到PostsController#new
实例化新帖子,验证类别参数并构建视图。此视图可以是新页面,也可以是弹出模式。