Questions about @dhh code on Writing Software Well for Controllers

42 views
Skip to first unread message

David McDonald

unread,
Mar 4, 2018, 10:12:23 AM3/4/18
to Ruby on Rails: Talk
I was struck recently by how simplified the code is that @dhh was showing off in his youtube videos recently.  I'm trying to learn from it and get my code refactored properly.  The questions I'm finding are more of how his code lines up to what the rails generator creates. Below is an example of both of a #create action.

I realize that I probably shouldn't be comparing these two as they're made for different purposes, but from viewing both I can't help but see that one is much more code.

Rails Generated Controller #create

def create
  @post = Post.new(post_params)

  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: 'Post was successfully created.' }
      format.json { render :show, status: :created, location: @post }
    else
      format.html { render :new }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end
end

DHH code from (MessagesController#create)

def create
  @recording = @bucket.record new_message, parent: @parent_recording, status: status_param, 
    subscribers: find_subscribers, category: find_category

  if guided_setup?
    complete_guided_setup
  else
    respond_to do |format|
      format.any(:html, :js) { redirect_to edit_subscriptions_or_guided_recordable_url(@recording) }
      format.json { render :show, status: :created }
    end
  end
end

By looking at the two samples, I think the part I really feel I can improve upon is perhaps the "respond_to" blocks.  I began thinking through trimming down my code, but quickly noticed that there isn't a "format.html { render :new }" or a "if @post.save" example for this instance.  Anyone have thoughts on this? Maybe if he were to have shown a block that more closely represented the PostsController#Create, I would've seen something closer to the generated code.

Rob Jonson

unread,
Mar 5, 2018, 4:16:46 AM3/5/18
to Ruby on Rails: Talk
the top example looks really clear to me.

I can see immediately what it is doing and why.

there is almost no duplication and it is doing 'controller-type' work.

what don't you like about it?

David McDonald

unread,
Mar 5, 2018, 8:13:54 AM3/5/18
to Ruby on Rails: Talk
I guess I'm just looking at it from the idea of "less code is usually better code".  And also I'm trying to learn from others that have a better skill set and/or experience than I do.  But as I mentioned, perhaps I'm taking a snippet of code from one of his controllers that do not relate to the piece of generated code.
Reply all
Reply to author
Forward
0 new messages