【问题标题】:wrong number of arguments (0 for 1) in a rails app with two models具有两个模型的 Rails 应用程序中的参数数量错误(0 表示 1)
【发布时间】:2015-01-12 03:21:01
【问题描述】:

我不断收到“错误数量的参数(0 代表 1)”错误,这似乎是一个广泛的错误,我似乎无法缩小它的原因。

我正在制作一个约会应用程序,它在名为 Project 的表中记录日期范围(开始日期、结束日期)。创建新项目时,会为 start_date 和 end_date 之间的每个日期生成一个 ProjectDate 记录(即,2 月 1 日至 2 月 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

表结构

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 %>

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 arguments


    【解决方案1】:

    您没有将任何参数传递给 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 
    

    【讨论】:

    • 这给了我这个:"ActiveModel::ForbiddenAttributesError"
    • 我检查了并将参数传递给方法......这就是我感到困惑的地方。
    • ActiveModel::ForbiddenAttributesError 是因为没有按要求标记参数。见stackoverflow.com/questions/17335329/…
    • 我正在使用 params.require(:project).permit! ,所以它们都应该是好的。
    • 我已经在使用 def project_params params.require(:project).permit!结束
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2012-02-07
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多