簡體   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