编辑用户页面后更改设计路线

时间:2014-09-12 10:10:06

标签: ruby-on-rails devise

我希望我的用户在登录其编辑用户/更新帐户页面后能够直接进入订阅/新路径。任何人都可以帮我解决这个问题。我在下面列出了我的路线

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

   before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :email, :password) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:name, :line1, :line2, :town, :county, :postcode, :password, :password_confrimation, :current_password)}
  end

 private
  def after_sign_in_path_for(resource)
    edit_user_registration_path(current_user) #basically whichever path you think meets your needs
  end

routes.rb档案

  Rails.application.routes.draw do

  resources :subscriptions, only: [:new, :create, :show, :destroy]
  #gives standard routes

  get 'content/fruit'

  get 'content/veg'

  get 'content/mix'

  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)
  namespace :admin do
  get 'dashboard/index'
  end

  devise_for :users, :controllers => {:registrations => 'devise/registrations'}
   # devise_for :users
   resources :products do 
   resources :orders, only: [:new, :create]
   #tells rails needs product id number
  end

  # get 'pages/payment'

  get 'home/about'

  get 'home/contact'

  get 'seller' => "products#seller"

  get 'sales' => "orders#sales"

  get 'static_pages/productlanding'

  get "content/veg"

  get "content/fruit"

  get "content/mix"

  get 'subscriptions/new'

设计注册控制器

class Devise::RegistrationsController < DeviseController

  def update
    set_flash_message :notice, :"message here" if is_flashing_format?
    session[:user_return_to] = new_subscription_path
    super  
  end
end

编辑表单用户

<h2>Edit <%= resource_name.to_s.humanize %></h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
  <%= devise_error_messages! %>


  <div class="form-group">
    <%= f.label :avatar, class: 'col-sm-2 control-label'  %>
    <div class="col-sm-6">
      <%= f.file_field :avatar %>
    </div>
  </div>

  <div class="form-group">
    <%= f.label :name %>
    <%= f.text_field :name, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :email %>
    <%= f.email_field :email, class: "form-control" %>
  </div>

  <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
    <div class="form-group">
      Currently waiting confirmation for: <%= resource.unconfirmed_email %>
    </div>
  <% end %>

  <div class="form-group">
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i>
    <%= f.password_field :password, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i>
    <%= f.password_field :current_password, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :line1 %>
    <%= f.text_field :line1, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :line2 %>
    <%= f.text_field :line2, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :town %>
    <%= f.text_field :town, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :county %>
    <%= f.text_field :county, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :postcode %>
    <%= f.text_field :postcode, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :organization %>
    <%= f.text_field :organization, autofocus: true, class: "form-control" %>
  </div>


  <div class="form-group">
    <%= f.submit "Update", class: "btn btn-primary" %>
  </div>
<% end %>

<h3>Cancel my account</h3>

<p>Unhappy? <%= button_to "cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-danger" %></p>

<%= link_to "Back", :back %>

2 个答案:

答案 0 :(得分:1)

您需要覆盖设计注册控制器的更新操作。

class Devise::RegistrationsController < DeviseController

  def update
    set_flash_message :notice, :"message here" if is_flashing_format?
    session[:user_return_to] = new_subscription_path
    super  
  end
end

在您的路线中:

devise_for :users, :controllers => {:registrations => 'devise/registrations'}

应该有另一个控制器app/controllers/devise/registrations。上面的控制器代码。

如果您要制作自定义消息,则它来自config/locales/en.yml

en:
  devise:
    registrations:
      destroyed: "my custom message." 
      updated: "my custom message"

答案 1 :(得分:1)

您可以更改此方法的路径after_update_path_for(resource)

class Devise::RegistrationsController < DeviseController

  ## other devise stuff

  protected

  def after_update_path_for(resource)
    new_subscription_path
  end

end

如果您有多个设计模型,可以试试这个

class Devise::RegistrationsController < DeviseController

  ## other devise stuff

  protected

  def after_update_path_for(resource)
    if resource.is_a?(DeviseModel1)
     new_subscription_path
    else
     other_path
    end
  end

end

或者您可以将它们放入application_controller.rb