我的个人资料控制器:
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'
那么,我该如何插入呢?
答案 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)