【问题标题】:Rails 3: Couldn't find User without an IDRails 3:找不到没有 ID 的用户
【发布时间】:2012-09-29 22:05:13
【问题描述】:

您好,我目前正在开发我的第一个 Rails 项目(一个照片上传网站),但在创建属于用户的新相册的表单上出现错误。我正在尝试使用回形针宝石。它给了我错误:

ActiveRecord::RecordNotFound in AlbumsController#create

Couldn't find User without an ID

我猜这与我的创建操作中的实例变量有关,但我看不出有什么问题。任何指导都会有所帮助。这是我的文件:

_form.html.erb

<%= form_for (@album), :remote => true, :html => { :id => "uploadform", :multipart => true } do |f| %>
<div>
    <%= f.label :name %>
    <%= f.text_field :name %>


    <%= f.label :description %>
    <%= f.text_area :description %>


    <%= f.fields_for :avatar do |avatar_form| %>
    <%= avatar_form.label :avatar, "Upload" %>
    <%= avatar_form.file_field :avatar, :multiple => true %>
    <% end %>


    <%=f.submit %>
</div>
<% end %>

albums_controller 创建动作:

def create
  @users = User.all
  @user = User.find(params[:user_id])
  @album = @user.albums.build(params[:album])
  if @album.save
    flash[:success] = "Album created!"
  end 
end

配置/路由

Pholder::Application.routes.draw do
resources :users do
  resources :albums 
end

resources :albums do
  resources :pictures
end

专辑型号

class Album < ActiveRecord::Base
  attr_accessible :avatar, :name, :description
  has_and_belongs_to_many :users

  has_attached_file :avatar
end

如果您需要查看任何其他文件,请告诉我。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    因为这是一张新专辑,所以专辑哈希中没有我最初想到的user_id。我添加了一个新方法,将用户 ID 合并到哈希中。

    def create
      @users = User.all
      @album = Album.new(params[:album].merge!(:user_id => current_user))
      if @album.save
        flash[:success] = "Album created!"
      end 
    end
    

    如果您不想在 Album 模型中的 attr_accessible 中包含 user_id,您可以单独分配它。

    def create
      @users = User.all
      @album = Album.new(params[:album])
      @album.user_id = current_user.id
      if @album.save
        flash[:success] = "Album created!"
      end 
    end
    

    【讨论】:

    • 啊,我下结论太快了。由于这是一个新专辑,您需要输入 current_user id。你在用设计吗?你有任何current _user 变量吗?
    • 嘿。我实际上还没有进入会话或 current_user 变量,但我知道它们是什么,因为我已经完成了教程并阅读了一本关于 Rails 的书。这是我的第一个项目,所以我想在处理会话之前让表格全部工作。你会建议我先查找设计吗?我不太确定我的工作顺序是否正确
    • 如果您还没有处理过身份验证并且没有按他们所属的用户对条目进行分组,那么我将使用第二个示例并在保存之前注释掉该行,直到您这样做.
    • 当您设置某种登录时,您可以取消注释该行。
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多