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,