簡體   English   中英

參數丟失或值為空:用戶-Rails

[英]param is missing or the value is empty: user - Rails

我有以下Rails應用程序,該應用程序允許用戶訂閱小部件。 即,通過訂閱實現多對多模型,通過訂閱實現用戶對小部件。

我的模特:

class Subscription < ActiveRecord::Base
  belongs_to :user
  belongs_to :widget
  validates_uniqueness_of :user_id, scope: :widget_id
end

class User < ActiveRecord::Base
  has_many :subscriptions
  has_many :widgets, through: :subscriptions
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

class Widget < ActiveRecord::Base
  has_many :subscriptions
  has_many :users, through: :subscriptions
end

我的控制器:

class SubscriptionsController
  def edit
    @user = current_user
  end

  def update
    @user = current_user
    if @user.update(user_subscription_params)
      redirect_to @user, notice: "Subscriptions updated"
    else
      render :edit
    end
  end

  private

  def user_subscription_params
    params.require(:user).permit(:widget_ids)
  end
end

這是這樣呈現在views/subscriptions/_forms.html.erb

<%= form_for @user, url: user_subscription_path, method: :patch do |f| %>
  <%= f.collection_check_boxes :widget_ids, Widget.all, :id, :name %>
  <%= f.submit %>
<% end %>

我收到錯誤消息:

沒有路由匹配{:action =>“ show”,:controller =>“ subscriptions”}缺少必需的鍵:[:id]

我真的很感激如何解決此問題的任何想法。

編輯:

Routes.rb:

Rails.application.routes.draw do
  root 'home#index'

  resources :widgets
    resources :subscriptions
  devise_for :users

  devise_scope :user do  
    get '/users/sign_out' => 'devise/sessions#destroy'     
  end

authenticated :user do
  root to: 'home#index', as: :authenticated_root
end

你可以試試

<%= form_for @user, url: user_subscription_path(@user), method: :patch do |f| %>
  <%= f.collection_check_boxes :widget_ids, Widget.all, :id, :name %>
  <%= f.submit %>
<% end %>

暫無
暫無

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

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