Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveModel::MassAssignmentSecurity::SchedulesController#create中出错_Ruby On Rails_Activerecord_Attr Accessor - Fatal编程技术网

Ruby on rails ActiveModel::MassAssignmentSecurity::SchedulesController#create中出错

Ruby on rails ActiveModel::MassAssignmentSecurity::SchedulesController#create中出错,ruby-on-rails,activerecord,attr-accessor,Ruby On Rails,Activerecord,Attr Accessor,我试图声明一些虚拟属性,这些属性将用于在给定日期时间的情况下将日期和时间组合在一起,尽管我一直遇到以下错误。正如您可以从下面的代码示例中看到的,我是如何设置属性的,以及我传递给属性的信息 ActiveModel::MassAssignmentSecurity::Error in SchedulesController#create {"utf8"=>"✓", "authenticity_token"=>"j4V6DAqK5U/+ZGaSKDlrEoOBqXu3pEq/FM51i

我试图声明一些虚拟属性,这些属性将用于在给定日期时间的情况下将日期和时间组合在一起,尽管我一直遇到以下错误。正如您可以从下面的代码示例中看到的,我是如何设置属性的,以及我传递给属性的信息

ActiveModel::MassAssignmentSecurity::Error in SchedulesController#create

{"utf8"=>"✓",


"authenticity_token"=>"j4V6DAqK5U/+ZGaSKDlrEoOBqXu3pEq/FM51ingi2sg=",
 "schedule"=>{"event"=>"1",
 "result_id"=>"",
 "date"=>"04/11/2012",
 "arrival_time"=>"08:00 PM",
 "time"=>"08:00 PM",
 "duration"=>"1800",
 "location_id"=>"11",
 "selected_players"=>["",
 "41",
 "38"],
 "team_id"=>"1",
 "opponent_id"=>"1",
 "home_or_away"=>"Home"},
 "commit"=>"Save Event"}
控制器

    # POST /schedules
  # POST /schedules.json
  def create
    params[:schedule].delete(:date)
    params[:schedule].delete(:time)
    @user = User.find(current_user)

    @players = User.where(:team_id => current_user[:team_id]).all
    params[:schedule][:selected_players].compact
    #params[:schedule][:selected_players].reject!{|selected_players| selected_players==""}
    #@availabilities = @user.availabilities.create(:unique_id => params[:schedule][:id])

    @schedule = Schedule.new(params[:schedule])

    respond_to do |format|
      if @schedule.save
        #Notifier.event_added(@user,@schedule).deliver
        format.html { redirect_to(schedules_url,
                                  :notice => "#{event_display_c(@schedule.event)} vs #{@schedule.opponent.name} was successfully created.") }
        format.json { render :json => @schedule, :status => :created, :location => @schedule }
      else
        format.html { render :action => "new" }
        format.json { render :json => @schedule.errors, :status => :unprocessable_entity }
      end
    end
  end
模型

class Schedule:销毁
属性可访问:位置id、:用户id、:对手id、:日期时间、:得分对象、:得分对象、:事件、,
:球队id、:主场或客场、:到达时间、:持续时间、:选定球员、:结果id
属性访问器:日期,:时间

我相信您收到了一个MassaSignmentSecurity错误,因为您正在将虚拟属性
时间
日期
传递到
日程安排中。当您实例化新日程安排时,由于它们不在白名单中,Rails假定它们是不应进行质量分配的属性。您应该在启动新计划之前从
params
中删除它们,然后(如果需要)直接设置相应的实例变量:

def create
  date = params[:schedule].delete(:date)
  time = params[:schedule].delete(:time)
  @schedule = Schedule.new(params[:schedule])
  @schedule.date = date
  @schedule.time = time
  ...

如果要在保存模型时从
date
time
设置
datetime
,则应在保存之前创建一个
,以执行此操作(可能您已经有了)。

检查不可用的参数。然后这样做:

date = params[:schedule]
@schedule = Schedule.new(params[:schedule]) do |schedule|
  schedule.date = date
  ...
end
@schedule = Schedule.new(params[:schedule]) do |schedule|
  schedule = params[:schedule][:date]
  ...
end
或者,可以将体量指定规则设置为“非严格”:

config.active_record.mass_assignment_sanitizer = :logger
而不是有这些异常,过滤的属性只会被记录。然后你可以这样做:

date = params[:schedule]
@schedule = Schedule.new(params[:schedule]) do |schedule|
  schedule.date = date
  ...
end
@schedule = Schedule.new(params[:schedule]) do |schedule|
  schedule = params[:schedule][:date]
  ...
end

我自己解决了这个问题,只是在最后添加了数据库中的字段

date
time
?他们是OP发布的代码中的属性访问器。是否可能错误与
可用性
模型有关,而不是与
计划
模型有关?在
@availabilities=@user.availabilities.create(:schedule\u id=>params[:schedule][:id])
行中,您将
schedule\u id
分配给新创建的记录,如果
可用性
模型的
attr\u accessible
列表中没有
schedule\u id
,则可能引发批量分配错误。您能否确认创建操作中的哪一行导致了错误?我已经测试过类似的代码,我认为我的原始答案是正确的,当我尝试创建新实例时,我得到了质量分配错误。如果上面的修复不起作用,那么您需要缩小导致它的属性范围。您还可以发布
计划的模型架构吗
?已删除@availabilities同一问题错误仍然声明
ActiveModel::MassAssignmentSecurity::SchedulesController中的错误#create无法批量分配受保护的属性:日期、时间