Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法通过创建操作将行插入表中_Ruby On Rails_Ruby_Ruby On Rails 3_Form Submit - Fatal编程技术网

Ruby on rails 无法通过创建操作将行插入表中

Ruby on rails 无法通过创建操作将行插入表中,ruby-on-rails,ruby,ruby-on-rails-3,form-submit,Ruby On Rails,Ruby,Ruby On Rails 3,Form Submit,我确信我的问题必须有一个非常简单的解决方案,但我不知道为什么我不能把手指放在上面,问题是我正在尝试提交表单,但每次我提交表单时,创建操作控制器都会出现以下错误 Mysql2::错误:列“首选玩家”不能为空:插入已保存的玩家会话(首选玩家列表,会话id,首选对手,游戏id,游戏类型,对手列表,禁止玩家列表)值(空,空,空,空,空,空,空,空,空,空) 当提交表单时,错误显示为null的所有这些值如何通过参数传递,有人能告诉我如何使用从表单中获得的参数值来填充查询中的小null吗,create co

我确信我的问题必须有一个非常简单的解决方案,但我不知道为什么我不能把手指放在上面,问题是我正在尝试提交表单,但每次我提交表单时,创建操作控制器都会出现以下错误

Mysql2::错误:列“首选玩家”不能为空:插入
已保存的玩家会话
首选玩家列表
会话id
首选对手
游戏id
游戏类型
对手列表
禁止玩家列表
)值(空,空,空,空,空,空,空,空,空,空)

当提交表单时,错误显示为null的所有这些值如何通过参数传递,有人能告诉我如何使用从表单中获得的参数值来填充查询中的小null吗,create controller如下

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:)


希望这能帮助你们更好地理解这个问题。

你们似乎来自两个不同的地方。该方法顶部的代码块正在从传入参数的顶层提取值,但随后使用params[:saved_sessions]输入初始化新的SavedSession。这两件事似乎不匹配

如果在第一行的“对手列表=参数”[:对手列表]中找到“保存的会话.对手列表”,那么当您稍后尝试保存参数[:保存的会话]时,您将从参数中的另一个位置获得它

编辑:因此您不需要操作中的两组值。如果您像这样构建表单(或者至少像这样),您将正确获取参数,并且可以盲目地将它们发送到SavedSession.new,然后调用.save

- form_for(@aved_session) do |f| 
  -.blue_col
      = f.text_field :preffered_opponents, "", :class => :blue_bar
如果您允许f.text_字段构建id和name,那么rails magic将确保它们的命名/id'd正确,然后more rails magic将解释它们并正确构建您的输入参数。这会将您的参数构建为:

params = {:saved_session => {:preferred_opponents => "text value" }...
然后您可以将这些参数拉出:

saved_session_input = params[:saved_session]
像你一样把它们传给新的。不同的是,现在这些参数实际上在那里

你的方式是这样的:

params = {:preferred_opponents => "text value", :saved_session => {:preferred_opponents => nil }...
这意味着您要为new的预期值传递nil。请注意,在调用save之前,实际上并没有将本地值分配给新保存的会话


我希望这更清楚。

发布您的表单代码将帮助我们更好地帮助您。但我确实需要这两个变量,不是吗?我需要变量(代码顶部的块),这样我就可以将它们的值存储到数据库中,并且我确实需要使用参数[:saved_sessions]初始化新的SavedSession,我遗漏了什么???如果表单设置正确,顶层代码块应该是多余的,我没有使用HAML的经验,当您点击Send时,日志中的参数是什么样的?问题是您没有正确构建表单。举个例子。我将在我的答案中添加一个例子,以使其更有意义。抓紧一两分钟:)
params = {:preferred_opponents => "text value", :saved_session => {:preferred_opponents => nil }...