Как иметь два разных действия redirect_to для одного метода в рельсах? - PullRequest
0 голосов
/ 29 января 2019

быстрый вопрос, на который, я уверен, есть быстрый ответ.Все работает, за исключением того, что когда я обновляю контрольный список на панели инструментов домашней страницы, он перенаправляет на страницу профиля, потому что он использует метод обновления (я думаю) на контроллере профилей.Любые мысли о том, как заставить его просто перезагрузить страницу при обновлении контрольного списка, не изменяя?

Вот форма:

<div class="col-md-4 col-xs-12">
      <div class="card">
        <div class="card-body">
          <h3 class="card-title">Onboarding Checklist</h3>
            <div class="onboarding-checklist-container">
              <%= form_for @profile do |f| %>
                <% Checklist.all.each do |item| %>
                  <%= check_box_tag "profile[checklist_ids][]", item.id, @profile.checklists.include?(item) %>
                  <%= item.name %><br />
                <% end %>
                <%= f.submit "Update" %>
              <% end %>
            <div><!--end onboarding-checklist-container div-->
        </div><!--end col card-body div-->
      </div><!--end card div-->
    </div><!--end col div-->

А вот метод обновленияконтроллер профилей

def update
    @profile = current_user.profile
    @profile.update_attributes(profile_params)
    redirect_to current_profile_path
  end

Мне кажется, что я мог бы сделать заявление if, но я еще недостаточно продвинут, чтобы знать, как это сделать.

Мне также неясно, где это показывает, что это использует действие «обновление».Это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать рельсы redirect_back helper

def update
  @profile = current_user.profile
  @profile.update_attributes(profile_params)
  redirect_back fallback_location: current_profile_path
end

redirect_back перенаправит вас на действие, с которого запрос был сервером, т.е. request.referer.Мы используем fallback_location здесь для случая, когда request.referer был nil.

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

0 голосов
/ 29 января 2019

Вы можете добавить дополнительный вход к одной из ваших форм, что-то вроде этого:

<input type="hidden" name="dashboardredirect" value="1"/> 

И затем в вашем контроллере вы проверяете наличие этого значения, чтобы решить, какое перенаправление:

def update
    @profile = current_user.profile
    @profile.update_attributes(profile_params)

    # Redirect to profile page if no dashboard redirect given,
    #  Redirect to dashboard if it is given.
    redirect_to params[:dashboardredirect].nil? ? current_profile_path : dashboard_path
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...