2012-11-03 4 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

나는 새 일정을 인스턴스화 할 때 Schedule.new에 가상 속성 timedate을 통과하기 때문에 당신이 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 
    ... 

당신이 모델을 사용하면,를 저장할 때 다음 datetime에서 datetime을 설정하려면 그것을 수행하기 위해 before_save 콜백을 생성해야합니다 (이미 가지고있을 수도 있음).

+0

'date'와'time'에 데이터베이스에 필드를 추가, 자신이 알아 낸 : 당신은이 작업을 수행 할 수 있습니까? 그들은 OP 게시 된 코드에서 attr_accessors입니다. –

+0

여전히 나에게 같은 오류를 줄 것 같습니다 : S –

+0

'Schedule' 모델이 아닌'Availability' 모델에 대한 오류가있을 수 있습니까? '@availabilities = @ user.availabilities.create (: schedule_id => params [: schedule] [: id])''schedule_id'를 새로 생성 된 레코드에 할당하면' schedule_id'는'Availability' 모델의'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

이 솔루션은 작동하지 않습니다. –

관련 문제