Представление перенаправления после сохранения модели Rails - PullRequest
1 голос
/ 12 августа 2010

Когда я:

self.save

или

save!

в модели он автоматически перенаправляет меня в представление для данной модели. Как я могу переопределить это? Я хочу сохранить модель и затем перейти к другому действию / представлению в том же контроллере.
В частности, у меня есть процесс, в котором я сохраняю данные об участниках, а затем я хочу продолжить процесс, перейдя на следующую страницу, например, Страница оплаты, которая использует идентификатор сохраненной модели.

Ответы [ 3 ]

3 голосов
/ 12 августа 2010

В вашем контроллере у вас может быть блок, подобный:

def create
  @user = User.new(params[:place])

  respond_to do |format|
    if @user.save
      format.html { redirect_to(@user, :notice => 'User was successfully created.') }
      format.xml  { render :xml => @user, :status => :created, :location => @user }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
    end
  end
end

Вы можете изменить цель redirect_to (после format.html) отсюда - в настоящее время он направляет вас к записи для этогопользователь, т.е.@user.Взгляните на http://api.rubyonrails.org/classes/ActionController/Base.html для получения дополнительной информации.

1 голос
/ 12 августа 2010

если вы позвоните сохранить из вашей модели, вы никуда не будете направлены, он просто сохранит прямой доступ модели к базе данных.Ваши перенаправления описаны в вашем контроллере в ваших действиях создания и обновления.Вы можете найти список маршрутов, запустив rake routes, а затем выбрать путь, который должно отображать ваше приложение при сохранении экземпляра модели.у вас может быть маршрут с именем payment_path, который может выглядеть следующим образом в вашем контроллере

map.payment :controller => :payments_controller, :action => index

, и вы бы сказали в своем действии создания

def create
  if @item.save(params[:item])
    redirect_to payment_path 
  else
    flash[:error] = "there was a problem"
    render :action => buy
  end
end

, если вам нужно передать параметр, напримерИдентификатор пользователя для вашего маршрута, то вам необходимо включить его в параметры пути

redirect_to payment_path(@user) #=> automagically finds the id of active record models
1 голос
/ 12 августа 2010

Вероятно, у вас есть такой блок в ваших методах создания / обновления:

    respond_to do |format|
      if @post.save
        format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
        format.xml  { render :xml => @post, :status => :created, :location => @post }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
      end
    end

Так что, если ваша переменная экземпляра называется @post, и она перенаправляется в представление show для сообщения после его сохранения,все, что вам нужно сделать, это изменить часть "redirect_to (@post, ..." на что угодно. Допустим, вы хотите перенаправить в корень своего сайта - вместо этого вы можете иметь

redirect_to(root_path, :notice => 'Post was successfully created.')

Inв вашем конкретном случае вы можете использовать что-то подобное, если у вас настроены маршруты:

redirect_to(payment_page_path(@post), :notice => 'Post was successfully created.')

Надеюсь, это поможет!

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