Rails参数传递问题:控制台显示传参正常但controller报变量未定义
错误原因
Rails 不会自动把请求参数转换为控制器的局部变量,所有传递的参数都存放在名为 params 的哈希对象中,你直接调用 apartment_id 这个不存在的局部变量,自然会抛出未定义错误。即使日志里显示参数已经传递到后端,也需要你主动从 params 中取值。
修复方案
1. 调试打印参数的正确写法
把控制器动作里的打印代码改为从 params 中取值即可:
def hide_contact_email # 正确读取传递过来的apartment_id puts params[:apartment_id] redirect_to landlord_dashboard_path end
2. 完整实现隐藏邮箱功能的代码
如果你要完成修改show_email属性的业务需求,完整写法如下:
def hide_contact_email # 先查询对应apartment记录,建议关联当前登录用户做权限校验,避免越权操作 @apartment = Apartment.find(params[:apartment_id]) # 更新布尔属性为false @apartment.update(show_email: false) redirect_to landlord_dashboard_path end
额外优化建议:查询时建议关联当前登录的房东账号,比如使用
current_landlord.apartments.find(params[:apartment_id]),可以避免用户恶意传入其他房东的公寓ID修改数据。
内容的提问来源于stack exchange,提问作者Bastien
相关产品推荐
相关产品推荐

