将数据从控制器传递到模型

时间:2014-05-08 08:40:22

标签: ruby-on-rails ruby ruby-on-rails-4

到目前为止,每当我需要检查project是否有words时,我都需要实体project 1words,我正在通过{{1} } project_id

words model

因为在我的控制器中我已经设置了项目,我是否也需要在我的模型中执行此操作?或者我可以将项目的实例变量传递给模型。

2 个答案:

答案 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")