[英]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.