Ruby on Rails:视图访问请求参数并遍历哈希遇空数组问题
解决Rails视图遍历表单参数显示空数组的问题
嘿,我来帮你捋捋这个问题,你遇到的情况其实是几个小问题凑到一起了,咱们一个个解决:
1. 核心问题:请求动作不匹配
你把@final = final_params放在了show方法里,但show动作默认对应的是GET请求,而表单提交一般是用POST/PATCH这类方法提交到create或者update动作的。也就是说,你提交表单的时候,参数根本没传到show方法里,@final自然是空的,页面就显示空数组[]了。
举个例子,如果是提交新表单,你应该把参数处理放在create方法里:
def create @final = final_params # 这里可以加你的业务逻辑,比如保存到数据库 # @user = User.new(@final) # @user.save render :show # 直接渲染show视图,这样@final就能传递过去 end def show # 如果是从create渲染过来的,@final已经有值了;如果是正常GET请求的show,本来就不会有表单参数 end def final_params params.permit(:Name, :Address, :MobileNumber, :City) end
2. 视图输出的错误
你用了puts "#{key} #{value}",这个是把内容输出到服务器控制台,不是渲染到页面上!而且@final.each最后会返回@final本身,空的话就显示[]。
把视图代码改成这样,才能把参数渲染到页面:
<% if @final.present? %> <div class="params-list"> <% @final.each do |key, value| %> <p><%= key %>: <%= value %></p> <% end %> </div> <% else %> <p>没有接收到表单参数哦</p> <% end %>
3. 额外检查点
- 确认表单的提交路径和方法:表单要指向正确的动作,比如用
form_with的时候,指定method: :post(创建)或者:patch(更新),确保参数能传到对应的控制器动作里。 - 检查参数键名:表单输入框的
name属性要和final_params里的键完全一致,比如输入框是name="Name",那permit(:Name)才对(不过Rails一般推荐蛇形命名,比如:name,你可以统一一下命名风格)。
这样调整之后,应该就能正常在视图里看到表单提交的参数啦!
内容的提问来源于stack exchange,提问作者mallela prakash
相关产品推荐
相关产品推荐

