Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有关联的Rails模型方法_Ruby On Rails - Fatal编程技术网

Ruby on rails 具有关联的Rails模型方法

Ruby on rails 具有关联的Rails模型方法,ruby-on-rails,Ruby On Rails,我创建了一个用户可以投票投票的应用程序。我从开始,然后根据我的需要修改它 poll.rb: has_many :vote_options, dependent: :destroy has_many :votes, :through => :vote_options vote_option.rb: belongs_to :poll has_many :votes, dependent: :destroy vote.rb: belongs_to :vote_option belongs_t

我创建了一个用户可以投票投票的应用程序。我从开始,然后根据我的需要修改它

poll.rb:

has_many :vote_options, dependent: :destroy
has_many :votes, :through => :vote_options
vote_option.rb:

belongs_to :poll
has_many :votes, dependent: :destroy
vote.rb:

belongs_to :vote_option
belongs_to :user
user.rb

has_many :votes, dependent: :destroy
has_many :vote_options, through: :votes
用户只能投票一次。要检查用户是否在user.rb上投票,请执行以下操作:

def voted_for?(poll)
  vote_options.any? {|v| v.poll == poll}
end
然后我在
投票表中添加了一列
委托
。现在,我们想将投票支持的方法
仅限于委托为false的投票

所以我试着:

def voted_for?(poll)
  vote_options.where(:delegated => 0).any? {|v| v.poll == poll}
end
def voted_for?(poll)
  vote_options.votes.where(:delegated => 0).any? {|v| v.poll == poll}
end
返回:

Mysql2::错误:未知列“投票\选项.委派”在“何处” 子句”:从
vote\u options
内部联接中选择
vote\u options
*
投票
关于
投票选项
id
=
投票
投票选项id
其中
投票
用户id
=4和
投票选项
委托
=0

所以我试着:

def voted_for?(poll)
  vote_options.where(:delegated => 0).any? {|v| v.poll == poll}
end
def voted_for?(poll)
  vote_options.votes.where(:delegated => 0).any? {|v| v.poll == poll}
end
返回:

VoteOption::ActiveRecord\u Associations\u CollectionProxy:0x007f002ad28be8的未定义方法“投票”

我不明白,因为我已经建立了协会

我做错了什么?我该怎么解决呢?

如果你完全遵循了你在帖子中提到的内容,那么它将是

def voted_for?(poll)
    votes.any? {|v| v.vote_option.poll == poll}
end

看这个

你误解了联想

目前您正在调用投票选项。投票,这实际上是错误的

由于
vote\u选项
返回记录集合,您不能调用
。votes
对于集合,它将与单个记录一起工作,因为关联是vote\u选项有多个投票,这意味着一对多而不是多对多

对于你的情况,你可以试试看

def voted_for?(poll)
  votes.where(:delegated => 0).any? {|v| v.poll == poll}
end 

如果您还有任何疑问,请仔细阅读

谢谢您的回答,教程中的投票选项方法也很有效,因此我没有检查回购协议。我以前应该考虑过的。