2010-07-28 44 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