在我的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?
答案 0 :(得分:4)
首先,将模型重命名为 FeedSubscription ,然后将其放在 app / models / feed_subscription.rb 的文件中。然后更改控制器上的引用以访问 FeedSubscription 类并重命名方法所有者和 Feed 以及 CurrentUser ,因为方法总是在Ruby中以小写形式定义。
当你在Ruby中定义以大写字母开头的东西时,它会使它成为常量。