0

私のフォーラムでは、reply_to変数とquoted変数が新しい投稿ページに渡され、返信と引用が非常にうまく機能します。問題は、ユーザーが何か間違ったことをしたときに発生します。たとえば、投稿が短すぎる場合、コントローラーは「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

私は何かが足りないのですか?変数はグローバルである必要がありますが、なぜそれらは転送されないのですか?

4

1 に答える 1

1

init関数を呼び出さないでくださいcreate

これはうまくいくはずです:

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ビューでアクセスするだけです

于 2012-08-01T20:17:38.590 に答える