Я пытаюсь сделать приложение в 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>
Я новичок в прицелах и все еще пытаюсь понять, как все работает. Я немного удивлен, что если я заменю «by_profile» на «все», он действительно покажет массив проектов (я думаю, каждый проект, а не только те, которые созданы идентификатором профиля для соответствующей страницы профиля).
Кто-нибудь знает, как писать области видимости? Есть ли что-то, что я должен сделать в контроллере профилей, чтобы это сработало?
Project.where(profile_id: 1)
? - person Hieu Pham   schedule 04.02.2016