【问题标题】:user_id is nil when I attempt to create items当我尝试创建项目时 user_id 为零
【发布时间】:2016-03-02 22:59:03
【问题描述】:

我对 Rails 还很陌生,我遇到了一个问题,我试图创建项目,但我创建的每个项目都有 user_idnil。如果我在 localhost 中创建项目并检查以确保它是在 rails 控制台中创建的,它会显示但带有user_id = nil。提前感谢您的帮助!

用户是使用 Devise 创建的。

项目控制器

class ItemsController < ApplicationController

  def create
    @user = User.find(params[:user_id])
    @item = Item.new(item_params)
    @item.user = current_user
    if @item.save
      @item = Item.update_items(params[:items])
      redirect_to @user, notice: "Item was saved successfully."
    else
      flash[:error] = "Error creating item. Please try again."
      render @user
    end
  end

  private

  def item_params
    params.require(:item).permit(:name)
  end
end

用户控制器

class UsersController < ApplicationController
  # before_action :authenticate_user!

  def show
    @user = User.find(params[:id])
    @item = Item.new
    @items = @user.items
  end
end

【问题讨论】:

  • 对于这一行@user = User.find(params[:user_id]) 应该是曾经登录过的人吗?

标签: ruby-on-rails ruby devise


【解决方案1】:

我注释掉了不允许分配 user_id 的 authenticate before_filter....愚蠢的错误!

【讨论】:

    【解决方案2】:
    class ItemsController < ApplicationController
    
      def create
        user = current_user
        @item = current_user.items.new(params[:items])
        if @item.save
          redirect_to current_user, notice: "Item was saved successfully."
        else
          flash[:error] = "Error creating item. Please try again."
          render @user
        end
      end
    
      private
    
      def item_params
        params.require(:item).permit(:name)
      end
    end
    

    确保您的模型中有正确的关联

    class Item < ActiveRecord::Base
      belongs_to :user
      ...
    end
    
    class User < ActiveRecord::Base
      has_many :items
      ...
    end
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2020-11-15
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多