繁体   English   中英

从 Ruby on Rails 中的 ActionController::Parameters 中获取密钥

[英]Grabbing the key from the ActionController::Parameters in Ruby on Rails

这是我的代码

  def create
    @p_site = PSite.find(params.require(:plan_for).first[0])
    authorize @p_site, :c_s?
    if @p_site.save
      redirect_to :root, notice: "successfully added"
    else
      render :new
    end
  end

当我运行它时,我得到undefined method 'first' for <ActionController::Parameters:0x00005623c4d56f68>

我的 params[:plan_for] 看起来像这样: #<ActionController::Parameters {"82"=>"annual"} permitted: false>

我需要获取 82 的值并在 PSite 中找到。 我怎样才能做到这一点?

Params 在这里是Hash而不是数组。 Hash 的结构方式是键值对 例如:

my_hash = { key: "Some Value" }
mz_hash[:key] #=> "Some Value"

所以我想知道的第一件事是为什么你在这里使用 82 作为密钥? 如果它是一个 id,我会将其重组为如下所示: { id: 82, recurrence: "annual" }

专门针对您的情况:

params[:plan_for]["82"]          #=> "annual"
params.require(:plan_for)["82"]  #=> "annual"

# OR very dirty
params[:plan_for].values.first   #=> "annual"
params[:plan_for].keys.first     #=> "82"

你可能会看到上面的前两行是如何工作的,除非“82”是你所有参数的键(在这种情况下命名它更好。)而后者现在可能是你代码的一个肮脏的解决方案,但我也不会这样做推荐。

查看ruby 哈希值的文档

我首先允许我的参数,然后将其转换为 hash 并使用 first[0] 访问它。

@pp = params.require(:plan_for).permit..to_h

@p_site = PractitionerSite.find(@pp.first[0])

这将抢走我的价值 82

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM