Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 Rails 4:强参数和传递数据的问题_Ruby On Rails_Ruby_Ruby On Rails 4_Model_Strong Parameters - Fatal编程技术网

Ruby on rails Rails 4:强参数和传递数据的问题

Ruby on rails Rails 4:强参数和传递数据的问题,ruby-on-rails,ruby,ruby-on-rails-4,model,strong-parameters,Ruby On Rails,Ruby,Ruby On Rails 4,Model,Strong Parameters,大家好 首先,我是Rails的新手。四年前我在大学里做过一些事情,现在我决定重新开始。在版本4中,很多事情都发生了变化 无论如何,我遇到了强参数问题。以下是我所拥有的: 我使用的是Ruby 2.1和Rails 4.1 我正在尝试为曲棍球比赛创建一个带有参数(id、a队、b队、竞技场、日期、得分a、得分b)的表单。团队是一张桌子(id,名称),竞技场是一张桌子(id,名称) 当我将参数从表单传递到控制器时,json参数似乎没有问题。但是,当它转换为match_params时,它缺少来自其他表的参数

大家好

首先,我是Rails的新手。四年前我在大学里做过一些事情,现在我决定重新开始。在版本4中,很多事情都发生了变化

无论如何,我遇到了强参数问题。以下是我所拥有的:

我使用的是Ruby 2.1和Rails 4.1

我正在尝试为曲棍球比赛创建一个带有参数(id、a队、b队、竞技场、日期、得分a、得分b)的表单。团队是一张桌子(id,名称),竞技场是一张桌子(id,名称)

当我将参数从表单传递到控制器时,json参数似乎没有问题。但是,当它转换为match_params时,它缺少来自其他表的参数的一些值。例如,我经过arena_id:12,但它显示arena_id:12为空

我在这件事上花了5天多的时间。谢谢你的帮助

下面是一些代码。如果您需要我提供更多信息,请告诉我

迁移数据

class CreateMatches < ActiveRecord::Migration
  def change
    create_table :matches do |t|
      t.references :team_a,     default: 1 # unknown
      t.references :team_b,     default: 1 # unknown
      t.references :arena,    default: 1 # unknown
      t.datetime :date
      t.integer :score_a
      t.integer :score_b
      t.timestamps
    end
    add_index :matches, :team_a_id
    add_index :matches, :team_b_id
    add_index :matches, :arena_id
  end
end

class CreateTeams < ActiveRecord::Migration
  def change
    create_table :teams do |t|
      t.string :name, null: false
      t.timestamps
    end
  end
end

class CreateArena < ActiveRecord::Migration
  def change
    create_table :arena do |t|
      t.string :name, null: false
      t.timestamps
    end
  end
end

当您调用此项时,除名称外的所有内容都将被删除:

params.require(:arena).permit(:name)

当您调用此项时,除名称外的所有内容都将被删除:

params.require(:arena).permit(:name)

当您调用此项时,除名称外的所有内容都将被删除:

params.require(:arena).permit(:name)

当您调用此项时,除名称外的所有内容都将被删除:

params.require(:arena).permit(:name)

查看您的
匹配参数
,并将其与从表单传递给控制器的参数进行比较

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, team_a_id: [:id, :name], team_b_id: [:id, :name], area_id: [:id, :name])
end

Parameters: {"utf8"=>"✓", "authenticity_token"=>"0RJjnpczVkp2unG9VITyHYC89ThgELn5kVE2wYRymBU=", "match"=>{"team_a_id"=>"24", "team_b_id"=>"27", "arena_id"=>"21", "date(1i)"=>"2014", "date(2i)"=>"5", "date(3i)"=>"6", "date(4i)"=>"18", "date(5i)"=>"24"}, "commit"=>"Update"}
您允许您的
竞技场id
匹配参数中作为一个名为
区域id
的数组,包含元素
:id
:name
。但是,它只是作为
arena\u id
从表单中传递过来的。您应该将
match_params
函数更改为:

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id, :arena_id)
end

请注意,我还将
:team_a_id
:team_b_id
更改为与在参数中传递的内容一致,尽管看起来您没有传递
:score_a
:score_b
。您应该查看rails指南以了解更多信息。

查看您的
匹配参数,并将其与从表单传递给控制器的参数进行比较

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, team_a_id: [:id, :name], team_b_id: [:id, :name], area_id: [:id, :name])
end

Parameters: {"utf8"=>"✓", "authenticity_token"=>"0RJjnpczVkp2unG9VITyHYC89ThgELn5kVE2wYRymBU=", "match"=>{"team_a_id"=>"24", "team_b_id"=>"27", "arena_id"=>"21", "date(1i)"=>"2014", "date(2i)"=>"5", "date(3i)"=>"6", "date(4i)"=>"18", "date(5i)"=>"24"}, "commit"=>"Update"}
您允许您的
竞技场id
匹配参数中作为一个名为
区域id
的数组,包含元素
:id
:name
。但是,它只是作为
arena\u id
从表单中传递过来的。您应该将
match_params
函数更改为:

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id, :arena_id)
end

请注意,我还将
:team_a_id
:team_b_id
更改为与在参数中传递的内容一致,尽管看起来您没有传递
:score_a
:score_b
。您应该查看rails指南以了解更多信息。

查看您的
匹配参数,并将其与从表单传递给控制器的参数进行比较

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, team_a_id: [:id, :name], team_b_id: [:id, :name], area_id: [:id, :name])
end

Parameters: {"utf8"=>"✓", "authenticity_token"=>"0RJjnpczVkp2unG9VITyHYC89ThgELn5kVE2wYRymBU=", "match"=>{"team_a_id"=>"24", "team_b_id"=>"27", "arena_id"=>"21", "date(1i)"=>"2014", "date(2i)"=>"5", "date(3i)"=>"6", "date(4i)"=>"18", "date(5i)"=>"24"}, "commit"=>"Update"}
您允许您的
竞技场id
匹配参数中作为一个名为
区域id
的数组,包含元素
:id
:name
。但是,它只是作为
arena\u id
从表单中传递过来的。您应该将
match_params
函数更改为:

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id, :arena_id)
end

请注意,我还将
:team_a_id
:team_b_id
更改为与在参数中传递的内容一致,尽管看起来您没有传递
:score_a
:score_b
。您应该查看rails指南以了解更多信息。

查看您的
匹配参数,并将其与从表单传递给控制器的参数进行比较

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, team_a_id: [:id, :name], team_b_id: [:id, :name], area_id: [:id, :name])
end

Parameters: {"utf8"=>"✓", "authenticity_token"=>"0RJjnpczVkp2unG9VITyHYC89ThgELn5kVE2wYRymBU=", "match"=>{"team_a_id"=>"24", "team_b_id"=>"27", "arena_id"=>"21", "date(1i)"=>"2014", "date(2i)"=>"5", "date(3i)"=>"6", "date(4i)"=>"18", "date(5i)"=>"24"}, "commit"=>"Update"}
您允许您的
竞技场id
匹配参数中作为一个名为
区域id
的数组,包含元素
:id
:name
。但是,它只是作为
arena\u id
从表单中传递过来的。您应该将
match_params
函数更改为:

def match_params
  params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id, :arena_id)
end
请注意,我还将
:team_a_id
:team_b_id
更改为与在参数中传递的内容一致,尽管看起来您没有传递
:score_a
:score_b
。您应该查看rails指南以了解更多信息。

好的,我发现了我的错误。(感谢JKen13579)

我把params放错地方了

应该是这样的:

def match_params
    params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id , :arena_id)
end

def team_params
  params.require(:team).permit(:name, matches_params:[:id, :match_id, :name])
end

def arena_params
  params.require(:arena).permit(:name, matches_params:[:id, :match_id, :name])
end
它解决了问题。

好的,我发现了我的错误。(感谢JKen13579)

我把params放错地方了

应该是这样的:

def match_params
    params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id , :arena_id)
end

def team_params
  params.require(:team).permit(:name, matches_params:[:id, :match_id, :name])
end

def arena_params
  params.require(:arena).permit(:name, matches_params:[:id, :match_id, :name])
end
它解决了问题。

好的,我发现了我的错误。(感谢JKen13579)

我把params放错地方了

应该是这样的:

def match_params
    params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id , :arena_id)
end

def team_params
  params.require(:team).permit(:name, matches_params:[:id, :match_id, :name])
end

def arena_params
  params.require(:arena).permit(:name, matches_params:[:id, :match_id, :name])
end
它解决了问题。

好的,我发现了我的错误。(感谢JKen13579)

我把params放错地方了

应该是这样的:

def match_params
    params.require(:match).permit(:date, :score_a, :score_b, :team_a_id, :team_b_id , :arena_id)
end

def team_params
  params.require(:team).permit(:name, matches_params:[:id, :match_id, :name])
end

def arena_params
  params.require(:arena).permit(:name, matches_params:[:id, :match_id, :name])
end

它解决了这个问题。

SP悄悄地吃掉了未经许可的参数。识别开发中可能需要允许的参数的一种快速方法是在Rails配置中设置
config.action\u controller.action\u on\u unpermitted\u parameters=:raise
。它会抱怨参数是合法的,但应该被忽略,所以它实际上只是在需要时暂时使用的东西。SP悄悄地吃未经许可的参数。识别开发中可能需要允许的参数的一种快速方法是在Rails配置中设置
config.action\u controller.action\u on\u unpermitted\u parameters=:raise
。它会抱怨参数是合法的,但应该被忽略,所以它实际上只是在需要时暂时使用的东西。SP悄悄地吃未经许可的参数。识别开发中可能需要允许的参数的一种快速方法是在Rails配置中设置
config.action\u controller.action\u on\u unpermitted\u parameters=:raise
。它会抱怨params是合法的,但是