具有两个模型的 rails 应用程序中的参数数量错误(0 代表 1)

wrong number of arguments (0 for 1) in a rails app with two models

我不断收到 'a wrong number of arguments (0 for 1)' 错误,这似乎是一个广泛的错误,我似乎无法缩小它的原因。

我正在制作一个约会应用程序,它在名为 Project 的 table 中记录日期范围(start_date、end_date)。创建新项目时,将为 start_date 和 end_date 范围内的每个日期生成一个 ProjectDate 记录(即 Feb.1 -Feb.7 创建 7 个 ProjectDate 记录)。

出现错误的行是:“if @project.update_attributes”

我是 rails 的新手,所以我真的不明白为什么它不传递参数。我的理论是,也许我的 form_for url 路径有误...但我不知道怎么办。

项目控制器(出现错误的地方)

def edit_date_range 
 @project = Project.find(params[:p])
end

def update_date_range 
 @project = Project.find(params[:p])
   if @project.update_attributes
    redirect_to  k1s3_path(:p => @project.id)
  else
   redirect_to  edit_date_range_path(:p => @project.id)
 end
end

型号

  class Project < ActiveRecord::Base
   has_many :project_dates, dependent: :destroy, inverse_of: :project
   accepts_nested_attributes_for :project_dates, allow_destroy: true

 after_update :add_and_remove_dates

def dates_in_date_range
  (self.prep_start.to_date .. self.prep_end.to_date.to_a)
end

def add_and_remove_dates
  dates.where('schedule_date < ? OR schedule_date > ?', start_date, end_date).destroy_all
  dates_in_date_range.each do |date|
  dates.find_or_create_by(schedule_date: date, available: true)
  end  
end

  class ProjectDates < ActiveRecord::Base
    belongs_to :project, inverse_of: :project_dates

Table 结构

Project table structure
  :id 
  :title (string)
  :start_date (date)
  :end_date(date)
  :status (boolean)

ProjectDates table structure
  :id 
  :project_id (integer)
  :schedule_date (date)
  :available (boolean)

形式

  <%= form_for @project, url: update_date_range_path(:p => @project.id) do |f| %>  

  <%= f.hidden_field :org_start, :value => @project.start_date %>
  <%= f.hidden_field :org_end, :value => @project.end_date %>
  <%=  f.text_field  :end_date %>
  <%=  f.text_field  :start_date%>

  <%= f.submit 'SAVE CHANGES' %>       

  <% end %>

您没有将任何参数传递给 update_attributes 方法,该方法需要 1 个参数(通常是包含需要更新的所有内容的散列)。因此 wrong number of arguments (0 for 1) 错误消息。

变化:

if @project.update_attributes

if @project.update_attributes(project_params)

project_params 将是根据需要设置所需参数的私有方法

private
def project_params
   params.require(:project).permit(<attr1>, <attr2>, <attr3>...)
end