Ruby on rails 确定相关型号的计数是否>;0
我有一个模型叫Ruby on rails 确定相关型号的计数是否>;0,ruby-on-rails,model,Ruby On Rails,Model,我有一个模型叫Stem。我需要一个“竖起大拇指”功能,因此我创建了第二个模型,名为Thumb,它由stem\u id和user\u id组成 我还使用restful身份验证插件获取用户凭据 我有一个“竖起大拇指”按钮,它可以在thumbs表中添加一行,但我希望能够检查当前登录的用户是否已经竖起了这个特定的stem 我尝试将此添加到Stem模型: def thumbed Thumb.count_by_sql ["SELECT COUNT(*) FROM thumbs WHERE user_
Stem
。我需要一个“竖起大拇指”功能,因此我创建了第二个模型,名为Thumb
,它由stem\u id
和user\u id
组成
我还使用restful身份验证插件获取用户凭据
我有一个“竖起大拇指”按钮,它可以在thumbs
表中添加一行,但我希望能够检查当前登录的用户是否已经竖起了这个特定的stem
我尝试将此添加到Stem
模型:
def thumbed
Thumb.count_by_sql ["SELECT COUNT(*) FROM thumbs WHERE user_id = ? AND stem_id = ?", current_user.id, self.id ]
end
这里的问题是stem
模型无法访问控制器拥有的当前用户
变量
有没有一种方法可以让我访问此属性,或者,有没有另一种方法可以让我检查此属性?我希望将其作为模型中的一个属性,因为茎被传递给使用RubyAMF的Flex应用程序
谢谢 您可以将当前用户传递给
拇指
?你从哪里打过来的
顺便说一句,您可以尝试使用关联来简化所有这些。我不是100%确定我理解你在做什么,但听起来你有以下几点
class Stem
has_many :thumbs
end
class User
has_many :thumbs
end
class Thumb
belongs_to :user
belongs_to :stem
end
然后,您可以使用find-Through关联来获取数据,而无需使用直接SQL。查看此RailsCast:您的控制器知道当前用户,而您的
Stem
型号可能不应该知道。但是,您可以清理代码,避免使用名为_scope的硬连接SQL,并将用户传递给它
#thumb.rb
named_scope :for_user_id, lambda {|id| {:conditions => {:user_id => id}}}
#stem.rb
def thumbed_by_user(user)
self.thumbs.for_user_id(user.id).count > 0
end
# some controller
stem = some_method_that_gets_a_stem
is_already_thumbed = stem.thumbed_by_user(current_user)
首先对我起作用的是:
我在stem模型中添加了以下方法:
def thumbed_by? usr_id
Thumb.count(:conditions => {:user_id => usr_id, :stem_id => self.id}) > 0
end
def owned_by? usr_id
self.id == usr_id
end
我还补充说:
attr_accessor :thumbed, owned
然后,在我的show action中,我添加了以下几行:
@stem.thumbed = @stem.thumbed_by? current_user.id
@stem.owned = @stem.owned_by? current_user.id
这正是我想要的工作方式(Flex应用程序已经正确地解释了这一点),但是有没有一种方法可以缩短它?是的,我确实有一些类似于设置的关联,我可以从sql更改为其他类型,如果我有当前用户的id,我不能在thumbed上使用任何参数,因为我希望我的Flex应用程序在通过Rubyamfhmm传递数据时将其作为属性读取。我想我帮不了什么忙,因为我从来没有用过RubyAMF。也许您可以从flex应用程序中调用thumbs\u控制器中的一个操作,从而检查用户id?我认为这里的基本问题是,当模型层可能属于控制器时,您试图在模型层中执行某些操作。从我所看到的,RubyAMF被设计成插入控制器层。是的,我想我只需要在这个过程中添加几个步骤,并将其放入控制器中