Rails:has_many,通过不在视图/索引中显示

时间:2015-07-13 13:12:37

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在编写一个简单的时间跟踪应用程序,其中用户拥有多个客户端以及客户端具有多个项目的位置。

我希望用户能够查看他们的项目列表(适用于所有客户端)。为了实现这一点,我通过用户和项目之间的关系建立了一个has_many。

但出于某种原因,我无法让他们的项目显示在他们的索引视图中。这可能是一个非常简单的原因,我只是没有注意到,所以如果是这样的话,请提前道歉。

以下是相关代码。

项目索引控制器:

def index
    @projects = current_user.projects.paginate(:page => params[:page], :per_page => 6)
end 

项目模型:

class Project < ActiveRecord::Base
  belongs_to :client

  validates :name, presence: true, length: { maximum: 30 }
  validates :fee, presence: true, numericality: { only_integer: true, 
  greater_than_or_equal_to: 0, less_than_or_equal_to: 100000 }
  validates :client_id, presence: true

end

客户端模型:

class Client < ActiveRecord::Base
    belongs_to :user
    has_many :projects, dependent: :destroy 
    validates :user_id, presence: true
    validates :name, presence: true, length: { maximum: 30 }
    validate :user_id_is_valid

    private 

    def user_id_is_valid
        errors.add(:user_id, "is invalid") unless User.exists?(self.user_id)
    end 
end 

用户模型的相关部分:

class User < ActiveRecord::Base
  has_many :clients, dependent: :destroy
  has_many :projects, through: :clients

index.html.erb:

<div id="projects-list">
    <% if current_user.projects.any? %>
        <h3>Projects</h3>
        <ul class="project-list">
            <% render @projects %>
        </ul>
        <%= will_paginate @projects %>
    <% end %>
</div>

_project.html.erb:

<li>
    <%= link_to "#{project.name}", '#' %>
</li>

1 个答案:

答案 0 :(得分:1)

应该是:

<%= render @projects %>

<% render @projects %>