我正在尝试使用 Rails 4 制作应用程序。
对于这个问题,我有 4 个相关模型,分别是 Project、Scope、Disclosure、Finalise。
这些协会是:
项目.rb:
has_one :scope
accepts_nested_attributes_for :scope
在我的 project.rb 模型中,我尝试将范围定义为:
scope :visible, -> { joins(:disclosures).group("projects.id").merge(Disclosure.full_disclosure)}
scope :finalised, -> { joins(:finalises).group("projects.id").merge(Finalise.published)}
范围.rb
belongs_to :project
has_one :disclosure
has_one :finalise
accepts_nested_attributes_for :disclosure, :finalise
披露.rb:
belongs_to :scope
完成.rb:
belongs_to :scope #, counter_cache: true
在我的项目控制器中,我有一个定义为:
def all
@projects = Project.visible.finalised
render 'index'
end
我的目标是让该操作仅显示标记为已完成和公开的项目(因为这些范围在 Finalize 和 Disclosure 模型中定义。
在我的disclosure.rb中我有
scope :full_disclosure, lambda {where('allusers' == true)}
我的披露表中有一个名为 :allures 的属性
在我的 finalise.rb 中,我有:
scope :published, lambda {where('draft' == false )}
我的 finalize 表中有一个名为 :draft 的属性。
在我的项目索引视图中,我有:
<% @projects.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: '100%', height: '200px' if project.hero_image.present? %>
<div class="indexheading"> <%= link_to project.title, project %> </div>
<div class="indexsubtext"> <%= truncate(project.description, :ommission => "...", :length => 250) %></div>
</div>
</div>
<% end %>
</div>
<% end %>
在我的 routes.rb 中,我有:
resources :projects do
get 'projects/all' => 'projects#all', :as => 'all_current_projects'
end
我不知道的部分是如何制作视图,拿起项目#all 动作?
当我尝试在我的 url 中输入 projects#all 时,我得到的项目被标记为草稿(因此不符合我在 finalise.rb 中定义的范围)。我不知道我是否没有在我尝试在 project.rb 中合并的范围内正确选择标准,无论如何,我不知道如何让我的索引视图与它一起使用控制器动作。
我被困住了。我所写的内容显然不起作用 - (因为当我在浏览器中键入 project#all 时,输出中包含草稿;然后还因为我不知道如何使视图在我定义的范围内工作在模型和控制器中。
当我耙路线时,我得到:
project_all_current_projects GET /projects/:project_id/projects/all(.:format) projects#all
project_available_students GET /projects/:project_id/projects/currently_available_students(.:format) projects#currently_available_students
project_available_sponsors GET /projects/:project_id/projects/currently_available_sponsors(.:format) projects#currently_available_sponsors
project_expiring_student_projects GET /projects/:project_id/projects/expiring_soon_students(.:format) projects#expiring_soon_students
project_expiring_sponsor_projects GET /projects/:project_id/projects/expiring_soon_sponsors(.:format) projects#expiring_soon_sponsors
我认为合并功能可能需要添加一些东西才能从项目、范围到最终确定/披露。