我有一个视频模型,我试着把它和杂物身份联系起来。omniauth运行得很好。我试图实现的是,当一个人登录并提交视频时,我希望该视频能够与提交它的用户相关联。
我在视频模型中设置了belongs_to :user和一个名为user_uid的列。我还在用户模型中设置了has_many :videos。
问题是,每当我提交一个新的视频时,我得到的uid是1(这是默认值)。那是怎么回事呢?
视频模型:
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 %>发布于 2014-01-03 02:21:03
简单的解决方案--除了登录之外,不要使用OmniAuth的uid。一旦用户登录,您将拥有一个用户id,Rails可以更容易地处理该用户id。将您的videos.user_uid列重命名为user_id并快乐。
https://stackoverflow.com/questions/20887965
复制相似问题