Controller syntax

why is this required:

  def new
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build
  end

instead of:
  def new
    @comment = Post.find(params[:post_id]).comments.build
  end

is the 2nd style possible? If no, why not?
if yes, why is the 1st style preferred?

Nathan Kirk wrote:

why is this required:

  def new
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build
  end

instead of:
  def new
    @comment = Post.find(params[:post_id]).comments.build
  end

is the 2nd style possible? If no, why not?
if yes, why is the 1st style preferred?

Depends on your view code. Remember that controller @instance variables
are copied to the view, so that the first example would make both @post
and @comment available in the view, whereas the second example would
only make @comment available.

Best,

Marnen Laibow-Koser wrote:

Nathan Kirk wrote:

  why is this required:
def new
@post = Post.find(params[:post_id])
@comment = @post.comments.build
end
instead of:
def new
@comment = Post.find(params[:post_id]).comments.build
end
is the 2nd style possible? If no, why not?
if yes, why is the 1st style preferred?
Depends on your view code. Remember that controller @instance variables are copied to the view, so that the first example would make both @post and @comment available in the view, whereas the second example would only make @comment available.

And of course if you just had @post you could easily extract comments
in the view code by @post.comments.build. @comment is really not
necessary because @post gives you the handle you need.

Norm

Norm Scherer wrote:

Marnen Laibow-Koser wrote:

  def new

only make @comment available.
  

And of course if you just had @post you could easily extract comments in
the view code by @post.comments.build.

But you shouldn't. That's too much logic for the view.

@comment is really not necessary
because @post gives you the handle you need.

Wrong. If you care about MVC, you shouldn't be building objects in the
view layer. (If you don't care about MVC, you shouldn't be using
Rails.)

Norm

Best,