【发布时间】:2015-12-24 19:46:31
【问题描述】:
我的应用有用户,用户可以发布指向我的应用的链接。我设置了一个关联,以便用户 has many :links 和链接 belong_to 用户(请参阅下面的模型)。现在我正试图让用户的电子邮件出现在显示模板中,并且我为 Link.user 获得了新链接的 nil 值。有人可以解释为什么吗?我的关联不正确吗?发布链接时用户已登录。
用户模型:
class User < ActiveRecord::Base
has_many :links
acts_as_voter
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
链接模型:
class Link < ActiveRecord::Base
belongs_to :user
acts_as_votable
attr_accessor :avatar
mount_uploader :avatar, AvatarUploader
end
show.html.erb:
<%= time_ago_in_words(@link.created_at) %> by <%= @link.user.try(:email) %>
架构:
create_table "links", force: :cascade do |t|
t.string "title"
t.string "url"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
end
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
在链接控制器中创建链接;
def new
@link = Link.new
end
def create
@link = Link.new(link_params)
if @link.save
redirect_to root_path
else
render 'new'
end
end
private
def link_params
params.require(:link).permit(:title, :url, :avatar)
end
【问题讨论】:
-
users和links表的外观如何?链接表中是否有 user_id 列? -
我为链接和用户发布了我的架构。是的,链接表中有一个用户 ID @archana
-
一定要使用控制台检查关联,以确保正确创建记录。请参阅下面的答案。
-
请同时向我们展示
Link创建的代码。 -
我刚刚添加了用于创建链接的控制器操作@JohannesThorn
标签: ruby-on-rails ruby-on-rails-4 associations