在我的论坛中,reply_to 和引用的变量被传递到新的帖子页面,非常好地启用回复和引用。当用户做错事时,问题就出现了;例如,如果帖子太短,控制器会呈现“posts/new”并出现 Flash 错误。
我一辈子都无法让控制器在渲染时传递这些。这是我的设置。
两个变量都在新方法中初始化:
def new
@post = Post.new
init_quoted
init_reply_to
if @quoted
@post.content = "[quote="+@quoted.user.name+"]"+@quoted.content+"[/quote]"
end
end
def init_reply_to
if params[:reply_to]
@reply_to = Discussion.find(params[:reply_to])
end
end
def init_quoted
if params[:quoted]
@quoted = Post.find(params[@quote])
end
end
当用户没有犯错时,这很有效。但是,从以下代码中的“else”开始,变量没有被传递:
def create
@post = current_user.posts.build(params[:post])
if @post.save
flash[:success] = "You reply has been added."
redirect_to controller: 'discussions', action: 'show', id: @post.discussion.id, anchor: 'post'+@post.id.to_s
else
render template: 'posts/new', locals: { reply_to: @reply_to, quoted: @quoted }
end
end
我错过了什么吗?变量应该是全局的,那么为什么不转移它们呢?