2010-07-28 49 views
0

我構建了一些數據通過jQuery的$。員額送,我送看起來像這樣的數據:這是從jQuery的轉換,其編制的數據對象Rails的形式PARAMS問題

authenticity_token: LxHlgi1WU8o0DtaNuiQOit/e+HlGR2plVcToHUAhA6I= 
crews[0][boat_id]: 2 
crews[0][crew][]: 10 
end_time: 1280408400 
start_time: 1280404800 

  • 創建DOM中找到的每個「船員」,稱爲船員陣列[]。
  • 然後,我循環播放DOM中的工作組,創建一個對象並存儲它的船ID
  • 然後我爲其船員成員列表創建另一個數組,然後將其添加到船員的對象中並推送到'船員陣列。 (該JS是有點長,可以張貼如果需要的話)

然後在我的控制,我有:

def create 
    @outing = Outing.create(
    :club => current_user.club, 
    :title => 'Outing', 
    :start_time => Time.at(params[:start_time].to_i), 
    :end_time => Time.at(params[:end_time].to_i) 
) 
    @outing.save 

    Rails.logger.debug(params[:crews].inspect) 
    params[:crews].each_with_index do |crew,i| 
    Rails.logger.debug(crew.inspect) 

    @crew = Crew.create(
     :boat_id => crew[:boat_id].to_i, 
     :outing_id => @outing.id 
    ) 
    @crew.save 

    crew[:crew].each do |c| 
     @cu = CrewUsers.create(
     :crew_id => @crew.id, 
     :user_id => c.to_i 
    ) 
    end 
    end 

    render :nothing => true  
end 

兩個檢查報表打印是這樣的:

{"0"=>{"crew"=>["10"], "boat_id"=>"2"}} 
["0", {"crew"=>["10"], "boat_id"=>"2"}] 

和我得到這個錯誤:

TypeError (Symbol as array index): 

對我來說,船員不應該是一個在dexed數組,這就是問題所在。但我也可能完全錯誤。我在做什麼錯誤或如何解決它的任何想法?

回答

2

您的params[:crews]Hash,但您嘗試使用它,好像它是Array。哈希本身沒有索引,而只有鍵。

你可以得到你要尋找的,如果你使用Hash#each_pair結果(或Hash#each_value如果你不需要鍵),而不是each_with_index

params[:crews].each_pair do |i, crew| # note that the block parameters are reversed 
    ... 
end 

爲了證明:

hash = {"0"=>{"crew"=>["10"], "boat_id"=>"2"}} 
hash.each_pair do |i, crew| 
    puts crew.inspect 
end 
#=> {"crew"=>["10"], "boat_id"=>"2"} 

請注意,您仍然會遇到尋找crew[:boat_id]的問題,因爲您的密鑰是字符串而不是符號。

+0

你是一個血腥的明星,謝謝!我有一種感覺,那是不對的。 有趣的是,我想知道爲什麼'crew'子數組沒有被解析爲哈希通過jQuery/Rails – amr 2010-07-28 13:32:57