Rails 4 - 范围 - 表达形式
Rails 4 - scopes - form of expression
我正在尝试在 Rails 4.
中制作一个应用程序
我有用户、配置文件和项目的模型。
协会是:
User has_one :profile
Profile belongs_to :user & has_many :projects
Projects belongs_to :profile.
在我的个人资料显示页面中,我试图显示属于该个人资料的项目。
我尝试在我的项目模型中编写一个范围:
scope :by_profile, lambda { | profile_id | where(:profile_id => profile_id) }
然后,在我的个人资料显示页面中,我尝试将该范围用作:
<% Project.by_profile.sort_by(&:created_at).in_groups_of(3) do |group| %>
<div class="row">
<% group.compact.each do |project| %>
<div class="col-md-4">
<div class="indexdisplay">
<%= image_tag project.hero_image_url, width: '80px', height: '80px' if project.hero_image.present? %>
<br><span class="indexheading"> <%= link_to project.title, project %> </span>
</div>
</div>
<% end %>
<% end %>
</div>
我是示波器的新手,仍在努力了解它的工作原理。我有点惊讶,如果我用 'all' 替换 'by_profile' 它实际上显示了一系列项目(我认为每个项目,而不仅仅是那些由相关个人资料页面的个人资料 ID 创建的项目)。
有人知道怎么写作用域吗?我应该在配置文件控制器中做些什么来帮助完成这项工作吗?
你在这里做什么
Project.by_profile..
不工作,因为你定义了范围 by_profile
和 arity 为 1(它应该得到 proffile_id
),但你没有传递任何。
Project.by_profile(params[:profile_id]).sort_by(&:created_at).in_groups_of(3) # will work
但这里更简单的方法是使用关联:
Profile.find(params[:id]).projects.sort_by(&:created_at).in_groups_of(3)..
关于作用域你应该了解什么?它们几乎是“class
”方法,但写得更好:)
调用作用域时,请确保向其传递正确数量的参数。
这里是定义作用域的一种较短的方法(->
被称为 stubby lambda):
scope :by_profile, ->(profile_id) { where(profile_id: profile_id) }
我正在尝试在 Rails 4.
中制作一个应用程序我有用户、配置文件和项目的模型。
协会是:
User has_one :profile
Profile belongs_to :user & has_many :projects
Projects belongs_to :profile.
在我的个人资料显示页面中,我试图显示属于该个人资料的项目。
我尝试在我的项目模型中编写一个范围:
scope :by_profile, lambda { | profile_id | where(:profile_id => profile_id) }
然后,在我的个人资料显示页面中,我尝试将该范围用作:
<% Project.by_profile.sort_by(&:created_at).in_groups_of(3) do |group| %>
<div class="row">
<% group.compact.each do |project| %>
<div class="col-md-4">
<div class="indexdisplay">
<%= image_tag project.hero_image_url, width: '80px', height: '80px' if project.hero_image.present? %>
<br><span class="indexheading"> <%= link_to project.title, project %> </span>
</div>
</div>
<% end %>
<% end %>
</div>
我是示波器的新手,仍在努力了解它的工作原理。我有点惊讶,如果我用 'all' 替换 'by_profile' 它实际上显示了一系列项目(我认为每个项目,而不仅仅是那些由相关个人资料页面的个人资料 ID 创建的项目)。
有人知道怎么写作用域吗?我应该在配置文件控制器中做些什么来帮助完成这项工作吗?
你在这里做什么
Project.by_profile..
不工作,因为你定义了范围 by_profile
和 arity 为 1(它应该得到 proffile_id
),但你没有传递任何。
Project.by_profile(params[:profile_id]).sort_by(&:created_at).in_groups_of(3) # will work
但这里更简单的方法是使用关联:
Profile.find(params[:id]).projects.sort_by(&:created_at).in_groups_of(3)..
关于作用域你应该了解什么?它们几乎是“class
”方法,但写得更好:)
调用作用域时,请确保向其传递正确数量的参数。
这里是定义作用域的一种较短的方法(->
被称为 stubby lambda):
scope :by_profile, ->(profile_id) { where(profile_id: profile_id) }