Rails参数传递问题,尽管控制台显示参数正确传递,控制器正确调用



我在简单参数传递问题上挣扎围绕简化代码进行调试。我想传递一个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

最新更新