如何在Ruby on Rails中添加模型?

时间:2011-09-04 16:22:42

标签: ruby-on-rails

在我的Ruby on Rails项目中添加模型时遇到了一些问题。 我有一个可爱的控制器和模型,但控制器无法访问模型,因为符号似乎是......未定义。

所以我似乎并不了解Rails如何选择加载哪些类以及哪些类不加载。

这是我的模型文件(是的,我知道,我应该为每个模型都有一个文件。我做了。但我一直在尝试一切使它工作,而且目前我只有一个):

class Feed
  include Mongoid::Document
  field       :name,        :type => String
  field       :description, :type => String
  field       :public,      :type => Boolean, :default => false
  has_many    :posts, :class_name => 'FeedPost'
  embedded_in :user

  def isSubscribed? user
    res = user.feedsubscribtions.where :userId => self.user.id, :feedId => self.id
    res.count > 0
  end
end

class Feedsubscribtion
  include Mongoid::Document
  field       :userId, :type => String
  field       :feedId, :type => String
  embedded_in :user

  def Owner
    user = User.where :id => self.userId
    if user != nil then user.first else nil end
  end

  def Feed
    user = Owner()
    feed = user.feeds.where :id => self.feedId
    if feed != nil then feed.first else nil end
  end
end

使用Feed模型和控制器的所有工作都会膨胀。我刚刚在FeedControllers和其他几个类中遇到了这个问题,它没有关联的控制器,就控制器而言,我的Rails项目中似乎根本就没有。

然后我有我的feedsubscribtion_controller:

class FeedsubscribtionsController < ApplicationController
  has_to_be_connected

  def create
    if session[:user_id] != params[:id]
      @self        = CurrentUser()
      subscribtion = Feedsubscribtion.new :userId => params[:id], :feedId => params[:feed]
      @self.feedsubscribtions |=  [ subscribtion ]
      render json: { success: @self.save(validate: false), feed: params[:feed] }
    end
  end

  def destroy
    if session[:user_id] != params[:id]
      @self    = CurrentUser()
      uid, fid = BSON::ObjectId.new(params[:id]), BSON::ObjectId.new(params[:feed])
      @feed    = @self.feedsubscribtions.where :userId => uid, :fid => fid
      if @feed.count > 0
        @feed.first.delete
    @self.save(validate: false)
      end
    end
  end
end

我一直在努力做一个解决方法,其中Feed的方法会返回Feedsubscribtion的实例。它适用于“创造”:不适用于“破坏”。因为似乎Mongoid :: Document.where试图使用FeedSubscribtion。当然,它失败了。

发生了什么事? 为什么地狱Rails不会在自己的文件之外提供Feedsubscribtion?

1 个答案:

答案 0 :(得分:4)

首先,将模型重命名为 FeedSubscription ,然后将其放在 app / models / feed_subscription.rb 的文件中。然后更改控制器上的引用以访问 FeedSubscription 类并重命名方法所有者 Feed 以及 CurrentUser ,因为方法总是在Ruby中以小写形式定义

当你在Ruby中定义以大写字母开头的东西时,它会使它成为常量。