Как добавить модели в Ruby on Rails? - PullRequest
1 голос
/ 04 сентября 2011

У меня возникла какая-то проблема при добавлении моделей в мой проект Ruby on Rails. У меня есть симпатичная копия контроллера и модели, но контроллер не может получить доступ к модели, потому что символ, кажется, ... undefined.

Так что, похоже, я совсем не понимаю, как 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, насколько это касается контроллеров.

И тогда у меня есть мой feedsubscribetion_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 вернул бы мне экземпляр Feedsubscribetion. Это работало для «создания»: не для «уничтожения». Потому что, кажется, Mongoid :: Document.where пытается использовать FeedSubscribetion. И терпит неудачу, конечно.

Что со мной происходит? Почему, черт возьми, Rails не делает Feedsubscribetion доступным вне собственного файла ??

1 Ответ

4 голосов
/ 04 сентября 2011

Сначала переименуйте вашу модель в FeedSubscription , затем поместите ее в файл по адресу app / models / feed_subscription.rb .Затем измените ссылки на своих контроллерах для доступа к классу FeedSubscription и переименуйте ваши методы Владелец и Канал и CurrentUser , как методы должны всегда определяется в нижнем регистре в Ruby .

Когда вы определяете что-то, начинающееся с верхнего регистра в Ruby, это делает его константой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...