Rails Error: Can't understand the message - ArgumentError: wrong number of arguments (0 for 1)

Rails Error: Can't understand the message - ArgumentError: wrong number of arguments (0 for 1)

我正在尝试用 Rails 4.

制作一个应用

我有三个模型:

User.rb (for authentication and fixed details)
Profile.rb (for user details which can change)
project.rb (for projects that users create)

在我的 projects_controller 中,我有:

def show

    @project = Project.find(params[:id])
    @creator = User.find(@project.creator_id)
    @creator_profile = @creator.profile

  end

用户和项目的关联是项目属于用户。在我的项目 table 中,我有一个名为 'creator_id' 的整数属性。我没有单独的 'user_id' 字段。

我有创建者,因为我想定义创建项目的用户(以便项目创建者链接到该用户的个人资料(而不是正在查看该项目的 current_user 的个人资料)。

在我的项目模型中,我定义了一个范围和一个方法如下:

 scope :creator, lambda { where(@creator_profile = user.profile_id)}

 scope :current, lambda { where('project.start_date >= ?', Date.today)}

 def self.all_current_for_creator(creator)
    if creator.profile.present?
       creator.current
    else
      guest_visible
    end
  end 

然后,在我的个人资料展示中,我想展示创作者的所有当前项目。为此,我有:

 <div class="row">
      <div class="col-md-10 col-md-offset-1">
      <% Project.all_current_for_creator.sort_by(&:created_at) do |project| %>
      <div class="row">
            <div class="col-md-4">
              <div class="indexdisplay">
                <%= image_tag project.hero_image_url, width: '100%', height: '200px' if project.hero_image.present? %>
              </div>
            </div>
            <div class="col-md-8">
              <div class="row">
                <div class="col-md-12">
                  <div class="indexheading"> <%= link_to project.title, project %> </div>
                </div>
              </div>
              <div class="row">
                <div class="col-md-12">
                  <div class="indexsubtext">    
                    <%= truncate(project.description, :ommission => "...", :length => 250) %>
                  </div>              
                </div>
              </div>
            </div>
      </div>

     <% end %>

当我尝试这个时,我收到一条错误消息:

ArgumentError at /profiles/3
wrong number of arguments (0 for 1)

我不明白这个错误是什么意思。我不确定什么在寻找参数,我看不到任何没有参数且看起来应该有参数的内容。

谁能看出我哪里出错了?

您正在呼叫:

Project.all_current_for_creator

没有参数。你应该这样称呼它:

Project.all_current_for_creator(@creator)

更新

.sort_by(&:created_at) do |project|

应该是:

.sort_by(&:created_at).each do |project|

因为在第一种情况下,您要传递两个块 &:created_atdo ...