【问题标题】:How do you set an attribute when creating an ActiveRecord object?创建 ActiveRecord 对象时如何设置属性?
【发布时间】:2009-04-15 19:42:27
【问题描述】:

我正在尝试在我正在创建的对象上设置属性。我觉得这应该可行:

 def create
    @album = Album.new(params[:album])
    @album.user = current_user

    if @album.save
       flash[:notice] = 'Album was successfully created for ' + current_user.login + '.'
       redirect_to albums_url 
    else
       render :action => "new"
    end
  end

但它似乎忽略了对user 字段的分配。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    假设您的模型关系设置正确*,最好这样做:

    @album = current_user.albums.build(params[:album])
    

    ——这会将新专辑的 user_id 字段正确填充到当前用户的 ID。


    *类似:

    class User < ActiveRecord::Base
      has_many :albums
      .
      .
      .
    end
    
    class Album < ActiveRecord::Base
      belongs_to :user
      .
      .
      .
    end
    

    【讨论】:

    • 是的,我确实正确设置了类层次结构。那么,我应该用它来代替对 Album.new 的调用吗?当我尝试这样做时,我得到了 #<0x353c3a4>
    【解决方案2】:

    您的相册迁移或相册模型是否引用了 user_id 或与用户的关系?

    如果没有,即使您分配了该信息,数据库也不会保存它。

    【讨论】:

    • 嗯,这很尴尬。我忘了运行迁移脚本来在数据库中建立这种关系。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多