我对Rails有些新手,在以前的小应用程序中,我会把控制器弄得乱七八糟。我试图更有效地使用模型,并且无法真正找到一个学习模型函数等的好地方。
我在这里有这个模型,我想找到if (isFirstTime)
MainPivot.SelectedItem = SettingsPivotItem;
它Maps
,所以我创建了这个find_maps方法。
has_many
在我的class Subaccount < ApplicationRecord
belongs_to :account
has_many :users
has_many :maps
enum state: { active: 0, inactive: 1 }
def find_maps
Map.where(subaccount_id: self.id).all
end
end
中,我使用这样的方法在变量中调用它。
subaccounts_controller
现在,如果我跳转到该控制器的show视图并使用此代码。
class SubaccountsController < ApplicationController
def show
@submaps = Subaccount.find_maps
end
end
然后我收到了这个错误。
<% @submaps.each do |sm| %>
<%= sm %>
<% end %>
如果我在sub_account模型下调用它,为什么我会得到这个未定义的方法find_maps?我想确保在整个过程中采用最佳实践。请问有人帮帮我吗?
答案 0 :(得分:0)
因为以你的方式定义,这样
def find_maps
Map.where(subaccount_id: self.id).all
end
您必须在subaccount实例上调用它。 E.g。
Subaccount.first.find_maps
Subaccount.new.find_maps
Subaccount.find(some_id).find_maps
如果要在Subaccount类上调用它,请将其定义为
def self.find_maps
Map.where(subaccount_id: self.id)
end
我删除了那里没用的.all
。您想要所有地图或指定where子句。两者同时没有意义。
答案 1 :(得分:0)
当您致电Cookies
时,您的find_maps
方法实际上会复制ActiveRecord为您添加的方法。
在您的控制器显示方法中,您应该查找当前显示的子帐户并在其上调用地图:
has_many :maps