我目前正在使用rails应用程序上的ruby,rails 4。
我做了一些更改,并开始使用单个表继承,这显然导致了问题。
这是控制台打印出来的:
Completed 500 Internal Server Error in 3113ms
ActionView::Template::Error (undefined method `seller’ for #<User:0x00000105b10318>):
81: <!-- Collect the nav links, forms, and other content for toggling -->
82: <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
83: <%= render_navigation :context => (current_user.blank? ? :guest : :user) %>
84: <%= render_navigation :expand_all => true, :context => :auth %>
85: </div><!-- /.navbar-collapse -->
86: </div><!-- /.container-fluid -->
87: </nav>
app/views/layouts/home.html.erb:84:in `_app_views_layouts_home_html_erb___658910842130911230_2169593320'
app/controllers/home_controller.rb:7:in `main
作为一个新的编码器,我只能猜测用户使用旧方法将它们存储为Seller
存在某些问题。我们现在使用Seller
的单表继承,这是:
class User < ActiveRecord::Base
class Seller < User; end
Rails S
命令谢谢:D
答案 0 :(得分:0)
如果您对rails上的ruby不熟悉,我建议您不要使用单表继承,很多事情都会破坏(例如链接,表单,控制器的操作,等...)并修复它们你应该了解框架的基础知识。所以我建议你做的只是在users表中添加一个布尔列:
rails g migration AddSellerToUsers seller:boolean
这将更容易维护,并允许您验证用户是否是卖家,以便您可以在您的观看中执行以下操作:
<% if current_user.seller? %>
# show things that are specific to sellers
<% end %>
如果您真的想在这里使用单表继承,这是一个很棒的教程,可以帮助您了解工作原理:http://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/
答案 1 :(得分:0)
- 首先,您需要在users表中添加一个类列(最好避免使用类型列,因为它已经被rails使用了):rails g migration AddClassToUsers class:string
-run rake db:migrate
- 在您的用户模型中添加:
self.inheritance_column = :class
(这将指定sti的列)
和
def self.classes
%w(Seller)
end
所以稍后您可以执行以下操作:
def self.classes
%w(Seller Buyer Guest)
end
- 从用户模型中删除此行:
class Seller < User; end
- 在models文件夹中创建卖家模型文件:
# app/models/seller.rb
class Seller < User; end
有关详情,请务必关注此博文:http://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/
希望这会有所帮助