渲染模板时传递变量

时间:2012-08-01 20:14:15

标签: ruby-on-rails variables

在我的论坛中,reply_to和引用的变量被传递到新的帖子页面,非常好地启用回复和引用。当用户做错事时会出现问题;例如,如果帖子太短,控制器会使用闪存错误呈现“posts / new”。

我无法为我的生活让控制器在渲染时传递这些。这是我的设置。

两个变量都在新方法中初始化:

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

我错过了什么吗?变量应该是全局的,那么它们为什么不被转移呢?

1 个答案:

答案 0 :(得分:1)

好吧,你不要在create

中调用你的init函数

这应该有效:

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
    init_quoted
    init_reply_to
    render template: 'posts/new'
  end
end

无需将其指定为本地人,只需在视图中将其作为@quoted@reply_to进行访问