我有一个视频模型,我试图将其与omniauth身份相关联。 omniauth工作正常。我想要实现的是当一个人登录并提交视频时,我希望该视频能够与提交该视频的用户相关联。
我在视频模型中设置了belongs_to:user和一个名为user_uid的列。我还在用户模型中设置了has_many:视频。
问题是每当我提交一个新视频时,我都会得到1的uid(这是默认值)。那是什么给出了什么?
视频模型:
class Video < ActiveRecord::Base
belongs_to :user
end
用户模型:
class User < ActiveRecord::Base
has_many :videos
def self.from_omniauth(auth)
find_by_provider_and_uid(auth["provider"], auth["uid"]) || create_with_omniauth(auth)
end
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["name"]
end
end
end
这里也是当前架构:
create_table "users", :force => true do |t|
t.string "provider"
t.string "uid"
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "videos", :force => true do |t|
t.string "title"
t.string "description"
t.string "url"
t.datetime "created_at"
t.datetime "updated_at"
t.string "submitted_by"
t.string "identity_id", :default => "1"
t.string "user_uid", :default => "1"
end
视频提交页面代码:
<%= form_for(@video) do |f| %>
<% if @video.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@video.errors.count, "error") %> prohibited this video from being saved:</h2>
<ul>
<% @video.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_field :description %>
</div>
<div class="field">
<%= f.label :url %><br />
<%= f.text_field :url %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:0)
简单的解决方案 - 除了登录之外,不要将OmniAuth uid用于任何。一旦用户登录,您将拥有一个用户ID,Rails可以更轻松地处理。将您的videos
。user_uid
列重命名为user_id
并感到高兴。