2011-05-17 61 views
0

我确定必须有一个非常简单的解决方案来解决我的问题,但我不知道为什么我不能把它放在手指上,问题是我尝试提交表单,但每次我提出创建动作控制器提供了以下错误无法通过创建动作将行插入表中

Mysql2::Error: Column 'preffered_players' cannot be null: INSERT INTO saved_sessions (preffered_players , session_id , preffered_opponents , game_id , game_type , opponents_list , banned_players , players_list) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)

形式怎么过所有这些值,错误认为是空的,通过参数尽快提交表单传递,任何人都可以告诉我如何使用我从表单中获取的参数值来填充我的查询中的小空值,创建控制器如下

def create 
    opponents_list = params[:opponents_list] 
    banned_players = params[:banned_players] 
    game_type = params[:game_type] 
    session_id = params[:session_id] 
    preffered_opponents = params[:preffered_opponents] 
    game_id = params[:game_id] 
    players_list = params[:players_list] 
    preffered_players = params[:preffered_players] 

    @saved_sessions = SavedSession.new(params[:saved_sessions]) 

    respond_to do |format| 
     if @saved_sessions.save 
     format.html { redirect_to(@game, :notice => 'Game was successfully created.') } 
     format.xml { render :xml => @game, :status => :created, :location => @game } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @game.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

感谢您的任何意见...

我包括表单代码但其很凌乱(它的一个巨大的形式),加上其HAML :)

- form_tag('/saved_sessions',:method => :post, :id => "new_game") do 
.select_option 
    .list_col1 
    .fl 
     %img{:alt => "image", :border => "0", :src => "/images/happy_face.png"}/ 
    .blue_col 
     = text_field_tag :preffered_opponents, "", :class => :blue_bar 
    .clr 
    .list_col2 
    .list_col2_top_row 
     .radio_row 
     .fl 
      %input{:type => "radio", :name => "battle_scale", :value => "3"} 
     .fl 3 vs 3 
     .fl 
      %input{:type => "radio", :name => "battle_scale", :value => "5"} 
     .fl 5 vs 5 
     .clr 
     %div 
     .fl 
      %img{:alt => "image", :border => "0", :src => "/images/sad_face.png"}/ 
     .fl 
      /%input#banned_players.white_bar{:type => "text"}/ 
      = text_field_tag :banned_players, "", :class => :white_bar 
     .clr 
    .versus_row 
     #inputs-vs.versus_col1 
     .versus_col_row 
      .blue_col 
      /%input#input-1-vs.blue_bar{:type => "text"}/ 
      = text_field_tag 'input-1-vs', "", :class => :blue_bar 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .clr 
     .versus_col_row 
      .blue_col 
      /%input#input-2-vs.blue_bar{:type => "text"}/ 
      = text_field_tag 'input-2-vs', "", :class => :blue_bar 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .clr 
     .versus_col_row 
      .blue_col 
      /%input#input-3-vs.blue_bar{:type => "text"}/ 
      = text_field_tag 'input-3-vs', "", :class => :blue_bar 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .clr 
     .versus_col_row 
      .blue_col 
      /%input#input-4-vs.blue_bar{:type => "text"}/ 
      = text_field_tag 'input-4-vs', "", :class => :blue_bar 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .clr 
     .versus_col_row 
      .blue_col 
      /%input#input-5-vs.blue_bar{:type => "text"}/ 
      = text_field_tag 'input-5-vs', "", :class => :blue_bar 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .clr 
     .versus_col2 
     %img{:alt => "0", :border => "0", :src => "/images/vs.png"}/ 
     #inputs.versus_col1 
     .versus_col_row 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .blue_col 
      /%input#input-1.pink_bar{:name => "blah", :type => "text"}/ 
      = text_field_tag 'input-1', "", :class => :pink_bar 
      .clr 
     .versus_col_row 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .blue_col 
      /%input#input-2.pink_bar{:name => "blah", :type => "text"}/ 
      = text_field_tag 'input-2', "", :class => :pink_bar 
      .clr 
     .versus_col_row 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .blue_col 
      /%input#input-3.pink_bar{:name => "blah", :type => "text"}/ 
      = text_field_tag 'input-3', "", :class => :pink_bar 
      .clr 
     .versus_col_row 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .blue_col 
      /%input#input-4.pink_bar{:name => "blah", :type => "text"}/ 
      = text_field_tag 'input-4', "", :class => :pink_bar 
      .clr 
     .versus_col_row 
      .fl 
      %img{:alt => "image", :border => "0", :src => "/images/lock.png"}/ 
      .blue_col 
      /%input#input-5.pink_bar{:name => "blah", :type => "text"}/ 
      = text_field_tag 'input-5', "", :class => :pink_bar 
      .clr 
     .clr 
    .session_row 
     %p 
     %b You can save and share this session by entering your email. A unique code will be sent 
     %p.small_text (Session are stored for 30 days) 
    .seesion_send_row 
     .fl 
     /%input.big_white_bar{:type => "text"}/ 
     = text_field_tag 'email_bar', "", :class => :big_white_bar 
     .fl 
     %span 2+2= 
     %span 
     %span 
      /%input.small_bar{:type => "text"}/ 
      = text_field_tag 'code_bar', "", :class => :small_bar 
     .fl 
     /%a{:href => "#."} 
     /%img{:alt => "image", :border => "0", :src => "/images/send_button.png"}/ 
     = submit_tag("Send") 

希望这可以帮助你人们更好地理解这个问题..

+0

您可以发布您的表单代码 – Nick 2011-05-17 12:12:31

+0

发布您的表单代码将帮助我们更好地帮助您。 – 2011-05-17 12:13:38

+0

添加了表单代码, – 2011-05-17 12:21:08

回答

1

你似乎从两个不同的地方拉。该方法顶部的代码块将拉入传入参数顶层的值,但稍后您将使用params [:saved_sessions]输入初始化新的SavedSession。这两件事似乎不匹配...

如果在opponents_list = params [:opponents_list]找到saved_sessions.opponents_list在第一行,那么当您以后尝试保存params [:saved_sessions]时,重新从参数中的不同点获得它...

编辑:所以你不需要这两套值的行动中。如果你像这样构建你的表单(或者至少像这样),你会得到正确的参数,并且可以盲目地将它们发送到SavedSession.new中,然后调用.save。

- form_for(@aved_session) do |f| 
    -.blue_col 
     = f.text_field :preffered_opponents, "", :class => :blue_bar 

如果允许f.text_field打造的ID和名称,然后轨道魔将确保它们被命名为/正确id'd然后更神奇的轨道解释他们建立正确的输入参数。这将构建您的PARAMS为:

params = {:saved_session => {:preferred_opponents => "text value" }... 

然后你就可以拉这些PARAMS出来:

saved_session_input = params[:saved_session] 

,并将它们传递到新的,就像你。不同之处在于现在这些参数实际上在那里。

你是这样的方式:

params = {:preferred_opponents => "text value", :saved_session => {:preferred_opponents => nil }... 

这意味着你传递零在新的预期值。请注意,在调用保存之前,您实际上并未将您的本地值分配给新的saved_session。

我希望这更清楚。

+0

但我确实需要他们两个都不是我,我需要变量(代码顶部的块),所以我可以将他们的值存储到数据库中,我需要初始化一个新的SavedSession使用params [:saved_sessions],我失踪了什么? – 2011-05-17 12:17:43

+0

如果您的表单设置正确,则代码的顶部应该是多余的,我没有使用HAML的经验,当您点击发送 – Nick 2011-05-17 12:36:38

+0

时,日志中的参数看起来像什么问题是您没有正确构建表单。作为例子。我会给我的答案添加一个例子,以帮助它更有意义。坚持一会儿或两个:) – jaydel 2011-05-17 12:42:42