【问题标题】:Ruby on Rails access whole params hashRuby on Rails 访问整个参数哈希
【发布时间】:2014-11-25 05:08:49
【问题描述】:

我有一个处理用户轮播的应用程序 - 我目前正在添加管理员批准的功能。如果用户更新自己的 rota,则 params 哈希看起来像:

参数:{id:1, role_id: 1, team_id:1, rota: [startDate: 01/01/2014, endDate:02/02/2014]}

这些是使用以下表单提交的:

<%= form_for [@team,@role,@rota] do |f| %>
form code
<% end %>

我们需要访问 rota: 对象之外的属性,但目前找不到 as:

params.require 要求你传入一个对象。

我的团队成员已决定添加隐藏字段以提交 rota 对象中的属性,但这似乎是多余的,因为它们非常清楚地存在,我们只是找不到访问它们的方法和想法?

【问题讨论】:

  • 帮助我理解,为什么不直接为用户传递一个表单,允许特定的强参数?
  • 我们正在传递一个表单,但是从该表单发送的参数出现在 params 哈希中的任何对象之外。所以我们正在尝试访问它们。
  • 我会尽力提供答案

标签: ruby-on-rails ruby


【解决方案1】:

我在谈论类似的东西

def user_rota_params
    params.require(:user)
          .permit(:role_id, :team_id, :rota => [:startDate, :endDate])
end

然后,对于嵌套属性,您可以使用fields_for
因此,您的表单应该看起来像这样(省略标签并保持基本):

<%= form_for @user do |f| %>
    <%= f.text_field :role_id %>
    <%= f.text_field :team_id %>
    <%= f.fields_for :rota do |ff| %>
        <%= ff.date_field :startDate %>
        <%= ff.date_field :endDate %>
    <% end %>
<% end %>

【讨论】:

  • 如果我们没有在表单中指定 rota 和 rota,它会抱怨路由无效。
  • 那你用的是嵌套路由吗?
  • 是的,我们为这个页面设置的路由如下:Team/1/Role/1/Rota/1/Edit
  • 你的参数应该看起来像这样params={:role =&gt; {:id=&gt;1}, :team=&gt;{:id=&gt;1}, :rota=&gt;{:startDate=&gt;"..", :endDate=&gt;".."}}... 像params[:role][:id]params[:team][:id]params[:rota][:startDate]params[:rota][endDate]一样访问它们
猜你喜欢
  • 2011-04-15
  • 2014-04-09
  • 1970-01-01
  • 2017-10-19
  • 2017-08-08
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2010-12-06
相关资源
最近更新 更多