0

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

マージ機能には、プロジェクトからスコープを経てファイナライズ/開示に至るまでに何かを追加する必要があると思います。

4

0 に答える 0