到目前为止,每当我需要检查project
是否有words
时,我都需要实体project 1
和words
,我正在通过{{1} } project_id
。
words model
因为在我的控制器中我已经设置了项目,我是否也需要在我的模型中执行此操作?或者我可以将项目的实例变量传递给模型。
答案 0 :(得分:0)
您可以将project
本身作为参数传递:
def word_exist?(project)
keywords = project.keywords.exists?(id)
end
并在控制器中:
@project = Project.find(params[:id]) # example
words = Words.new
exists = words.word_exist?(@project)
答案 1 :(得分:0)
您最好使用instance method
访问所需数据:
#app/models/project.rb
class Project < ActiveRecord::Base
has_many :keywords
def word_exist?
self.keywords.exists?(self.id)
end
end
这将被调用如下:
@project = Project.find params[:id]
@project.word_exist?
因为它是您模型上的实例方法,您已经拥有了对象的数据,然后实例方法可以使用self
如果您想查找特定单词,您可以在实例方法中使用参数:
#app/models/project.rb
class Project < ActiveRecord::Base
has_many :keywords
def word_exist?(word)
self.keywords.exists?(keyword: word)
end
end
@project = Project.find params[:id]
@project.word_exist?("hello")