2012-11-03 37 views
0

即時嘗試聲明一些虛擬屬性,將用於將日期和時間組合在一起給予我日期時間,但我不斷收到以下錯誤。正如您從下面的代碼示例中看到的那樣,如何設置屬性以及傳遞給它們的信息。ActiveModel :: MassAssignmentSecurity :: SchedulesController中的錯誤#創建

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 < ActiveRecord::Base 
    belongs_to :location 
    belongs_to :opponent 
    belongs_to :team 
    belongs_to :result 
    has_many :availabilities, :dependent => :destroy 

    attr_accessible :location_id, :user_id, :opponent_id, :datetime, :score_for, :score_against, :event, 
        :team_id, :home_or_away, :arrival_time, :duration, :selected_players, :result_id 

    attr_accessor :date, :time 

回答

0

想通了這一點爲自己,只是添加的字段在數據庫中端

1

我相信,因爲你正在傳遞的虛擬屬性timedateSchedule.new當實例的新的時間表,你得到一個MassAssignmentSecurity錯誤,並且由於它們不在白名單列表中,所以Rails假定它們是應該n的屬性不是質量分配。你應該從params啓動新的日程安排,然後纔將其刪除(如果需要)直接設置相應的實例變量:

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

如果你想接盤datetimedatetime當模型被保存,你應該創建一個before_save回調來做到這一點(也許你已經有)。

+0

'date'和'time'?他們是OP發佈的代碼中的attr_accessors。 –

+0

似乎仍然給我同樣的錯誤:S –

+0

是否有可能錯誤是關於'可用性'模型,而不是'Schedule'模型?在'@availabilities = @ user.availabilities.create(:schedule_id => params [:schedule] [:id])這一行中,將'schedule_id'分配給新創建的記錄,如果' 「schedule_id」不在「可用性」模型的「attr_accessible」列表中。 –

0

檢查無法訪問的參數。那麼做到這一點:

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

或者,您可以設置質量分配規則,以非嚴格:

config.active_record.mass_assignment_sanitizer = :logger 

和而不是有這些異常,過濾後的屬性將只被記錄。那麼你可以這樣做:

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

此解決方案也不起作用 –

相關問題