我在简单参数传递问题上挣扎围绕简化代码进行调试。我想传递一个apartment对象,使用自定义控制器
将其布尔属性之一(show_email)从true更改为false这是我视图中的链接调用公寓控制器中的hide_contact_email动作
<%= link_to "Hide temporarily", apartment_hide_contact_email_path(apartment), method: :put %>
这里是简化的控制器apartments_controller。我只想看到传入的apartment_id
def hide_contact_email
#I want to check what I get in the console
puts apartment_id
redirect_to landlord_dashboard_path
end
控制台给我一个未定义变量错误.
Started PUT "/apartments/61/hide_contact_email" for 127.0.0.1 at 2021-09-10 10:35:11 +0800
Processing by ApartmentsController#hide_contact_email as HTML
Parameters: {"authenticity_token"=>"acsMqJMWR6rM9ooAzmhXKEJVP1HimENQpSMt1SrP3jZBWFxktNk5BI1rhu8BjN8zAdk93+0ksLTa63/YgOnyTQ==", "apartment_id"=>"61"}
Completed 500 Internal Server Error in 2141ms (ActiveRecord: 0.0ms | Allocations: 185548)
NameError (undefined local variable or method `apartment_id' for #<ApartmentsController:0x000055acd9351868>
Did you mean? apartment_url):
app/controllers/apartments_controller.rb:54:in `hide_contact_email'
我很困惑,为什么我得到一个未定义的局部变量apartment_id,其中控制台清楚地指出,1)正确的控制器被称为(处理由ApartmentsController#hide_contact_email)和2)参数已传递(apartment_id =>"61">(. 谢谢你。
Rails将自动将参数加载到params散列中,您可以像往常一样访问该散列。例如,如果你发送的是JSON content
{"company"; {"name";acme";address"}}
你的控制器将接收参数[:company]作为{"name"=比;"acme","address"=比;《胡萝卜街》;} .
您可以通过params哈希访问参数,即:params[:apartment_id]。
更多参考可以查看rails指南https://guides.rubyonrails.org/action_controller_overview.html