目前在跟着 ROR Tutorial 做(在做 6.0 的项目,但是教材目前只有 Rails 5 的),7.1.1 那里,不管我是什么操作,调试信息总是显示 permitted: false,总觉得哪里不对,有没有哪位前辈能解个惑?谢谢!
我想,你應該就是把 params
直接印在 view 上面,所以得到 permitted: false
是很正常的 :)
關鍵字:「Strong Parameters」
<body>
<%= render 'layouts/header' %>
<div class="container">
<% flash.each do |message_type, message| %>
<%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
<% end %>
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
是不是 debug 那里的参数问题啊?
求问,这个咋设置。。。,应该是跟这个有关 user_controller 里面的 private 方法
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, :email, :title, :password, :password_confirmation)
end
a = {"abc" => 1}
# 假设a是你那的参数
# Case 1
puts a.merge({"efg" => 2})
# Case 2
puts a
你在 merge 一个 hash 时,就像你 user_params 方法里做的一样,不会改变本身 a 或者 params 的值。 所以你打到页面上的 params 始终是 false
你可以尝试用 binding.pry 或者 debugger 在 controller 方法里打断点,你看你把一个 params 给 permit 后,再直接调用 params,看它 permit 的情况就知道为什么了。
不存在 "影响网页的输出" 这个概念。这些值都是你在 controller 的 action 中去 permit、去赋值、去改变的。页面上你只是可以展示这些值(或不展示),展示与否都是不会影响它本身的值的。就像你在终端定义一个 a 变量,你 puts a 变量,对 a 变量有任何影响和改变吗?具体是否 permit、是否赋值、是否改变。都是你在这个 action 中决定的。你可以把页面渲染这个动作当作是这个 action 中代码执行完毕后的最后一个延伸。
嗯嗯,我理解了。 那 permitted false 这样的情况,是不是代表少了东西或者多了东西?比如我 require 了 password,但是在有些页面我并没有涉及到这个,所以出来了个 false,还是哪里不对啊。。。
前面已经举过例子了
你在 controller 中去 permit 了 params,
params.require(:user).permit(:name, :email, :title, :password, :password_confirmation)
这行代码的结果是一个 permit 后的 params。
按我前面回复你的内容,你该想出 2 个可能的原因。
思路一: 在 permit 后,params 本身并没有改变,所以页面上还是 permit 为 false
这是一个可能的思路。是否正确,你需要去验证它!验证它,对于刚开始学习非常重要。
思路二: 只要 permit 参数后,params 就会变为 permit 为 true。
这也是一个可能的思路,你需要去验证它。
这两个思路你都去验证后,你就会知道你的问题:为何调试信息总是显示 permitted: false 啊?的原因了。