Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 导轨:can';不能正确调用嵌套路由_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 导轨:can';不能正确调用嵌套路由

Ruby on rails 导轨:can';不能正确调用嵌套路由,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有以下路线: shallow do resources :countries do resources :airports end end 我在调用其中两条路径时遇到问题 airports\u controller.rb文件开始 def create Rails::logger.debug "!!! Building airport with parameters #{params}" @country = Country.find(params[:country_i

我有以下路线:

shallow do
  resources :countries do
    resources :airports
  end
end
我在调用其中两条路径时遇到问题

airports\u controller.rb
文件开始

def create
  Rails::logger.debug "!!! Building airport with parameters #{params}"
  @country = Country.find(params[:country_id])
  Rails::logger.debug "!!! Found airport #{@country.name}"
  @airport = @country.airports.build(params[:airport])
最后一行给出了错误
Minitest::UnexpectedError:ActiveModel::ForbiddenAttributesError:ActiveModel::ForbiddenAttributesError
,但是我调用的参数是

!!! Building airport with parameters {"airport"=>{"iata_code"=>"CCC",
"icao_code"=>"CCCC", "name"=>"Airport 3", "city"=>"City 3", "latitude"=>"1.5",
"longitude"=>"1.5"}, "country_id"=>"980190962", "controller"=>"airports",
"action"=>"create"}
据我所知,所有这些都在我允许的参数中:

def airport_params
  params.require(:airport).permit(:iata_code, :icao_code, :name, :city, :latitude, :longitude, :notes, :country_id)
end
其次,我的
airports\\u form.html.erb
开始
,但这会给出一个错误
Minitest::UnexpectedError:ActionView::Template::error:undefined方法“airports\u path”,用于#
。是的,该路径未定义,但我试图访问路径
国家/地区\u机场\u路径
,该路径已定义

那么我在这里遗漏了什么呢?

在“def create”中

您已经正确创建了“airport_params”函数,但没有调用它。这应该可以解释
禁止属性错误


至于未定义的方法,乍一看它似乎是一个不正确的关联,您的模型是否正确相关(即
属于
并且
有许多
)?如果是这样,您可以尝试将
url:country\u airports\u path
添加到
form\u for
字段中

属性

您收到的属性错误基本上是由于未使用

Rails 4引入了
strong_params
,使您能够定义要传递给模型的特定属性(防止质量分配)。问题是您使用的是
rails3
方式传递所有属性,而没有将它们白名单

如前所述,您最好这样做:

#app/controllers/airports_controller.rb
Class AirportsController < ApplicationController
   def create
      @airport = Airport.new(airport_params)
   end

   private

   def airport_params
      params.permit(:airport).permit(:your, :params).merge(country_id: params[:country_id])
   end
end
如果要创建嵌套表单,最好使用ActiveRecord对象数组,以便向Rails提供使用嵌套资源的知识:

<%= form_for [@country, @airport] do |f| %>
   # builds route using "country_airport_path"
<% end %>

#使用“国家/地区/机场/路径”建立路线

您是否尝试过运行
rake路由
?因为应该定义机场路径。是的,我运行过rake路线。是的,定义了airport\u path,但代码没有路由到该路径(我不明白为什么应该这样做。我不是在寻找一个机场,我是在寻找一个国家的所有机场:country\u airports\u path,它也定义了,但没有被调用)。为了澄清为什么我不想要airport\u path,当我创建一个机场时,我不想路由到该机场的视图,我想路由回该国所有机场的列表。是的,这就是FrbiddenAttributeError[拍头]的原因。airport.rb开始类airport<%= form_for @airport do |f| %> # builds route using "airport_path" <% end %>
<%= form_for [@country, @airport] do |f| %>
   # builds route using "country_airport_path"
<% end %>