簡體   English   中英

Rails和strong_parameters“缺少必需參數”

[英]Rails & strong_parameters 'required parameter missing'

我正在為我的一個項目創建“轉推”(重播)功能,但我一直遇到此錯誤:

Required parameter missing: restream

我不確定我在這里缺少什么。 這是我的設置。 有任何想法嗎?

楷模

#app/models/member.rb
Class Member < ActiveRecord::Base
    has_many :statuses
end

#app/models/status.rb
Class Status< ActiveRecord::Base
    belongs_to :member
    has_many :restreams, class_name: "Status", foreign_key: "restream_id"
end

重播

#config/routes.rb
resources :statuses do
    member do
        post :retweet
    end
end

#app/controllers/statuses_controller.rb
def restream
    @restream = Status.new(restream_params)
    @restream.save
end

private

def restream_params
    params.require(:restream).permit(:restream_id, :content).merge(member_id: current_user.id)
end

#app/views/statuses/show.html.erb
<%= link_to image_tag("Re-Stream 3.png", class: "act_actions", title: "Restream", alt: "Restream"), restream_status_path(status.id), method: :post, :class => "btn restream" %>

您需要傳遞restream param 您還需要在get中發送它,並指定restream_param的值,因為它是link_to.

#app/views/statuses/show.html.erb
<%= link_to image_tag("Re-Stream 3.png", class: "act_actions", title: "Restream", alt: "Restream"), restream_status_path(status.id), params.merge({:restream => "the value you want to pass"})  method: :get, :class => "btn restream" %>

通過查看rails中的params hash可以最好地說明您的錯誤:


{“ company”:{“ name”:“ acme”,“ address”:“ 123 Carrot Street”}}

您將獲得params [:company]為{“ name” =>“ acme”,“ address” =>“ 123 Carrot Street”}


強大的參數

為了使您的strong_params起作用,您的params散列需要如下所示:

{ "restream": {"your":"params", "go":"here"} }

問題是您的params哈希看起來像這樣:

{"your":"param", "goes":"here"}

固定

有兩種方法可以解決此問題:

def restream_params
    params.permit(:restream_id, :content).merge(member_id: current_user.id)
end

這將允許:restream_id:content params而無需將其嵌入在params哈希的:restream選項中。

另一個選擇是通過鏈接傳遞:restream參數。 Sidney的答案對此非常有用,但是我將使用form_for ,因為我知道這會根據需要設置params哈希值:

<%= form_for @restream %>
    <%= text_field :restream_id %>
<% end %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM