首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的关联在Heroku上不起作用

简单的关联在Heroku上不起作用
EN

Stack Overflow用户
提问于 2011-12-30 05:59:40
回答 1查看 406关注 0票数 0

我有一个正在部署到Heroku的应用程序。对于我的用户模型,除了"show“操作之外,似乎所有的东西都能正常工作。

下面是我为用户模型编写的代码(不管怎样,什么是相关的)

代码语言:javascript
复制
class User < ActiveRecord::Base

  attr_accessor :password
  attr_accessible :username, :email, :password, 
                  :password_confirmation, :confirmed, 
                  :school_id, :graduation, 
                  :admin, :stars, :credits, :school_name

  has_many :uploads, :dependent => :destroy
  belongs_to :school
  has_many :downloads, :source => :user_id, :dependent => :destroy
  has_many :comments, :dependent => :destroy

  #VALIDATIONS OMITTED

  #WARNING
  before_create :encrypt_password

  #PASSWORD ENCRYPTION METHOD OMITTED

  #getter for school name
  def school_name
    school.name if school
  end

  #setter for school name (will create school if it didn't find one)
  def school_name=(name)
    self.school = School.find_by_name(name) unless name.blank?
  end

  def add_credits(num)
    self.credits += num
  end

  def charge
    self.credits -= 1
    self.save(false)
  end

  def has_downloaded?(file)
    @downloads = self.downloads.find(:all, :conditions => "upload_id = #{file.id}")
    return (@downloads.length > 0)
  end


  private

    #MORE PASSWORD ENCRYPTION LOGIC

end

下面是我的上传模型的代码:

代码语言:javascript
复制
class Upload < ActiveRecord::Base
    default_scope :order => 'uploads.created_at DESC'

    attr_protected :linked_file_name, :linked_content_type, :linked_size

    attr_accessible :user_id, :stars, :ratings, 
                    :semester, :professor, :year, 
                    :description, :course_id, :school_id

    after_save :set_course_school

    belongs_to :user
    belongs_to :school
    belongs_to :course
    has_many :downloads, :source => :upload_id, :dependent => :destroy
    has_many :comments, :foreign_key => "file_id", :dependent => :destroy
    #belongs_to :class

    #paperclip
    has_attached_file :linked,
          :storage => :s3,
          :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
          :path => ":class/:id/:attachment/:basename.:extension"

    #validations
    validates :school_id, :presence => true

    def update_rating
      @comments = self.comments.all
      if @comments.length > 0
        @stars = 0
        @comments.each do |comment|
          @stars += comment.rating
        end
        self.stars = @stars
        self.ratings = @comments.length
      end
      self.save(false)
    end

    def course_name
      return [course.subject, course.course_code].join(' ') if course
    end

    def course_name=(name)
      @split = name.split(' ', 2)
      @subject = @split.first
      @course_code = @split.last

      @conditions = {
        :subject => @subject,
        :course_code => @course_code,
        :school_id => self.school_id
      }

      self.course = Course.find(:first, :conditions => @conditions) || Course.create(@conditions)
    end

    def set_course_school
      course.set_school
    end

end

下面是控制器的操作:

代码语言:javascript
复制
  def show
    @user = User.find(params[:id])
    @uploads = @user.uploads.all
    @downloads = @user.downloads.all
  end

Heroku似乎对语句@user.uploads.all有一些问题,它在本地工作得很好,以下是日志给我的:

代码语言:javascript
复制
2011-12-29T21:57:07+00:00 app[web.1]: Started GET "/users/1" for 200.88.103.28 at 2011-12-29 13:57:07 -0800
2011-12-29T21:57:07+00:00 app[web.1]:   Processing by UsersController#show as HTML
2011-12-29T21:57:07+00:00 app[web.1]:   Parameters: {"id"=>"1"}
2011-12-29T21:57:07+00:00 app[web.1]: Completed   in 10ms
2011-12-29T21:57:07+00:00 app[web.1]: 
2011-12-29T21:57:07+00:00 app[web.1]: ActiveRecord::StatementInvalid (PGError: ERROR:  operator does not exist: character varying = integer
2011-12-29T21:57:07+00:00 app[web.1]: : SELECT     "uploads".* FROM       "uploads"  WHERE     ("uploads".user_id = 1) ORDER BY  uploads.created_at DESC):
2011-12-29T21:57:07+00:00 app[web.1]:                                                              ^
2011-12-29T21:57:07+00:00 app[web.1]:   app/controllers/users_controller.rb:21:in `show'
2011-12-29T21:57:07+00:00 app[web.1]: HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
2011-12-29T21:57:07+00:00 app[web.1]: LINE 1: ...ROM       "uploads"  WHERE     ("uploads".user_id = 1) ORDER...

有什么想法吗?我想解决这个问题非常简单。奇怪的是,我有另一个Heroku部署的应用程序,它使用完全相同的用户逻辑(有一个显示页面,可以获取用户的所有“帖子”),而且工作得很好。代码看起来几乎一样..。

我非常感谢这个问题的解决方案。我希望我能提供一笔赏金,但我在一个Android问题上花了我大部分的时间在悬赏上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-30 06:13:19

从错误语句中可以看出,uploads表中的user_id列是一个varchar,而不是整数。据我所知,Postgres (Heroku使用的)不会自动强制转换。

你能确认数据类型吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8673993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档