Где я должен разместить свой блок response_to? - PullRequest
2 голосов
/ 09 января 2011

Допустим, у меня есть ArtcilesController с действием создания, подобным следующему.

def create
  @article = Article.new(params[:article])

  respond_to do |format|
    if @article.save
      format.html { redirect_to(@article, :notice => "Article created") }
      format.json { render :show }
    else
      format.html { render :new }
      format.json { render(:json => { :errors => @article.errors }, :status => :not_acceptable) }
    end
  end
end

То же действие можно записать так же, как следующее:

def create
  @article = Article.new(params[:article])

  if @article.save
    respond_to do |format|
      format.html { redirect_to(@article, :notice => "Article created") }
      format.json { render :show }
    end
  else
    respond_to do |format|
      format.html { render :new }
      format.json { render(:json => { :errors => @article.errors }, :status => :not_acceptable) }
    end
  end
end

Обратите внимание, что в первом примере есть блок if else внутри блока response_to, а во втором - два блока response_to внутри одного блока if else.

Должен ли я предпочесть одно другому? Если да, то почему? Или просто нужно выбрать стиль и придерживаться его?

Ответы [ 2 ]

3 голосов
/ 09 января 2011

Стиль только, однако вы только когда-либо отвечаете на один запрос и используете логику маршрутизации в вашем контроллере в соответствии с вашими моделями.

def create
  @article = Article.new(params[:article])
  respond_to do |format|
    format.html { 
     @article.save ? redirect_to(@article, :notice => "Article created") : render :new
    }
    format.json { 
       @article.save ? render(:show) : render(:json => { :errors => @article.errors }, :status => :not_acceptable)
    }
  end
end
0 голосов
/ 21 мая 2012

response_with в Rails 3 высушит это для кода шаблона, как указано выше.Он даже обрабатывает редактирование / новые формы и сообщения об ошибках, когда проверка завершается неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...