2016-09-13 3 views
0

Имея ресурс Foobar со следующим контроллером:Нужно ли устанавливать переменную экземпляра в методе контроллера ресурсов `# create`?

class FoobarController < ApplicationController 
    def new 
    @foobar = Foobar.new(baz: params[:baz]) 
    @foobar.build_data 
    end 

    def create 
    @foobar = Foobar.new(foobar_params) 
    respond_with(@foobar) 
    end 

    # ... 
end 

Нужно установить переменную экземпляра @foobar в #create методе? Могу ли я просто написать

def create 
    Foobar.new(foobar_params).tap &method(:respond_with) 
end 

?

ответ

2

Это зависит от того, с какими типами контента вы отвечаете. docs точно описывают, что происходит, когда вы вызываете respond_with. В вашем случае, в create действия, respond_with такое же, как в дальнейшем предполагается, что вы не указали какой-либо другой формат, чем HTML в respond_to вызов в контроллере:

respond_to do |format| 
    if @foobar.save 
    flash[:notice] = 'Foobar was successfully created.' 
    format.html { redirect_to(@foobar) } 
    else 
    format.html { render action: "new" } 
    end 
end 

Единственный случай, когда переменная @foobar экземпляра было бы необходимо, если есть ошибка проверки, а ваш шаблон new.html содержит @foobar. Если foobar_params всегда действительны, то respond_with всегда будет отвечать перенаправлением на действие show, поэтому переменная экземпляра не нужна.

Смежные вопросы