2010-11-19 73 views
1

我创建了一个应用程序,允许用户记录他们的锻炼。获取逻辑视图...帮助named_scope

用户可以保留其锻炼的私人或公共日志,并由check_box字段表示,该字段将整数1传递给workout.share列。私人日志可以通过workouts_controller查看,我通过过滤current_user来限制所有输出。

workouts_controller.rb

@workouts = current_user.Workouts.all 

公共锻炼通过单独community_controller示出并有我称这样

community_controller的锻炼

@workouts = Workouts.all 

然后过滤在结果查看以下内容

<% @workouts.each do |workout| %> 
<% if workout.share == 1 %> 
    ... 
<% end %> 
<% end %> 

最好我可以告诉这不是这样做的首选方法,我怀疑是我想要一个named_scope,以便我可以创建一个新变量`@shared_workouts'。这就是说我不熟悉命名范围,所以可以在哪里放置什么和正确的语法使用一些帮助。

+0

什么版本的Rails? – 2010-11-19 02:31:38

回答

1

如果使用的是轨道2,使用以下方法:在社区控制器

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => 1) 
end 

然后,你可以简单地使用:如果您使用的是轨道3

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => 1} 
end 

,改用此@workouts = Workouts.shared.all

1

彼得上面提到的,使用根据您使用Rails的版本named_scope /范围。你也不想为你测试使用值1。你想要使用true(就是说,如果你在迁移中使用了布尔类型)。

的原因是,如果你改变数据库可以存储不同(SQLite的有一个布尔类型,例如,MySQL使用一个微小的INT ...),和活动记录将管理它。 :)

class Workout < ActiveRecord::Base 
    named_scope :shared, :conditions => {:share => true} 
end 

或者

class Workout < ActiveRecord::Base 
    scope :shared, where(:share => true) 
end 

然后使用 “Workouts.shared” 访问named_scope。