[ruby-on-rails] 覆蓋設計註冊控制器



Answers

使用命名空間覆蓋Devise控制器和視圖的更好和更有組織的方式:

創建以下文件夾:

app/controllers/my_devise
app/views/my_devise

將所有想要覆蓋的控制器放入app / controllers / my_devise中,並將MyDevise命名空間添加到控制器類名稱中。 Registrations示例:

# app/controllers/my_devise/registrations_controller.rb
class MyDevise::RegistrationsController < Devise::RegistrationsController

  ...

  def create
    # add custom create logic here
  end

  ...    

end 

相應地更改您的路線:

devise_for :users,
           :controllers  => {
             :registrations => 'my_devise/registrations',
             # ...
           }

將所有必需的視圖從Devise gem文件夾複製到app/views/my_devise ,或使用rails generate devise:views app/views/my_devise rails generate devise:views ,刪除您不重寫的視圖並將my_devise文件夾重命名為my_devise

這樣你就可以將所有東西整齊地組織在兩個文件夾中。

Question

我在基於不同模型的註冊表單中添加了一個字段,請參閱如何在設計模型中使用嵌套屬性獲取血腥詳細信息。 這部分工作正常。

現在的問題是,當我保存時,它在設計提供的註冊控制器的創建操作中失敗, Activerecord::UnknownAttributeError在此字段(公司)上存在Activerecord::UnknownAttributeError

我假設我需要重寫註冊控制器,還是有更好/更簡單的方法,我應該接近這一點?




您還可以在您的控制器路徑中創建文件夾,並將整個設計控制器複製/粘貼到其中。 這不需要額外的配置。

因此,對於註冊控制器,它將是app/controllers/devise/registrations_controller.rb ,然後將設計registrations_controller.rb源文件複製到其中。 你可以從github https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb得到它,或者你可以在你的寶石源中找到它,或者當你使用RubyMine時在類行class Devise::RegistrationsController一個像地球符號一樣的球體......點擊它,它會為你打開Devise Registration Controller文件。 然後復制/粘貼。




您可以為設計定制生成視圖和控制器。

使用

rails g devise:controllers users -c=registrations

rails g devise:views 

它會將特定的控制器和視圖從gem複製到您的應用程序中。

接下來,告訴路由器使用這個控制器:

devise_for :users, :controllers => {:registrations => "users/registrations"}



Links