Rails4でアプリを作ろうとしています。
この質問には、プロジェクト、スコープ、開示、ファイナライズの 4 つの関連モデルがあります。
関連付けは次のとおりです。
Project.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)}
Scope.rb
belongs_to :project
has_one :disclosure
has_one :finalise
accepts_nested_attributes_for :disclosure, :finalise
ディスクロージャー.rb:
belongs_to :scope
Finalise.rb:
belongs_to :scope #, counter_cache: true
私のプロジェクトコントローラーには、次のように定義されたアクションがあります。
def all
@projects = Project.visible.finalised
render 'index'
end
私の目的は、そのアクションが、ファイナライズ済みおよび公開済みとしてマークされているプロジェクトのみを表示することです (これらのスコープは、ファイナライズおよび開示モデルで定義されているためです。
私のdisclosure.rbには
scope :full_disclosure, lambda {where('allusers' == true)}
公開テーブルに :allures という属性があります
私の finalise.rb には、次のものがあります。
scope :published, lambda {where('draft' == false )}
ファイナライズ テーブルに :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
私が知らない部分は、どのようにビューを作成し、project#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
マージ機能には、プロジェクトからスコープを経てファイナライズ/開示に至るまでに何かを追加する必要があると思います。