如何在Rails中从模型中将记录插入数据库?

时间:2015-01-11 12:20:42

标签: ruby-on-rails

我的个人资料控制器:

def change_cover
    @cover_name = params[:cover]

    Profile.cover_name(@cover_name, session[:username])
end

我的模特:

def self.cover_name(is, username)
    Profile.new(:cover_name => is, :username => username).save
end

但它会打印下一个错误:

ActiveRecord::UnknownAttributeError (unknown attribute: cover_name):
app/models/profile.rb:7:in `cover_name'
app/controllers/profiles_controller.rb:22:in `change_cover'

那么,我该如何插入呢?

2 个答案:

答案 0 :(得分:0)

生成此错误是因为您的数据库表假设您的模块具有默认设置,profiles没有名为cover_name的列

你可以做两件事来测试这个

1)直接检查您的数据库。 mysql中的示例代码

 `desc profiles`

2)登录rails控制台并输入

`Profile.new`

答案 1 :(得分:0)

您正在尝试使用属性profile_name创建配置文件,并且由于配置文件没有类似profile_name的属性,因此会抛出此错误,

我想你想要像

这样的东西
def self.cover_name(covername, username)
    ProfileCover.create(cover_name: covername, username: username)
end

此外,我在schema.rb中看不到任何关联,但我想个人资料封面应该以某种方式与您的个人资料相关联,因此您应该进行迁移创建一个

rails g migration AddProfileToProfileCovers profile:belongs_to

在profile_cover.rb中执行

belongs_to :profile

在profile.rb

has_one :provile_cover

并更新您的方法

def cover_name(covername, username)
    self.profile_cover.create(cover_name: covername, username: username)
end

并使用@profile.cover_name(covername, username)

进行调用

或相反(不推荐)

def self.cover_name(covername, username, profile)
    profile.profile_cover.create(cover_name: covername, username: username)
end

并使用Profile.cover_name(covername, username, profile)

进行调用