在ruby中使用模型和omniauth身份的关联问题

时间:2014-01-02 17:10:06

标签: ruby-on-rails omniauth

我有一个视频模型,我试图将其与omniauth身份相关联。 omn​​iauth工作正常。我想要实现的是当一个人登录并提交视频时,我希望该视频能够与提交该视频的用户相关联。

我在视频模型中设置了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 %>

1 个答案:

答案 0 :(得分:0)

简单的解决方案 - 除了登录之外,不要将OmniAuth uid用于任何。一旦用户登录,您将拥有一个用户ID,Rails可以更轻松地处理。将您的videosuser_uid列重命名为user_id并感到高兴。