Вызов метода активной записи из активного ресурса (Ruby / Rails) - PullRequest
1 голос
/ 13 июля 2011

Извиняюсь за очень широко заглавный вопрос.

В основном это следует из моего предыдущего вопроса о defs и о том, как они вызываются для экземпляров методов.

В основном так, как у меня сейчас:

Я устанавливаю активный ресурс на стороне клиента и отправляю его с помощью .save. Затем он проходит через мой контроллер на сервере и сохраняет активную запись того же класса.

, поэтому MyResource ->save -> MyRecord

MyRecord хранится со столбцом состояния, содержащим простую строку.Дело в том, что у класса MyRecord есть определение, называемое

  def get_status
    puts status
  end #Amazing method, I know

. В моем уме. Если бы я хотел выполнить get_status для MyRecord, все, что мне нужно было сделать, это следующее.

(Please note this is client side)
@test = MyRecord.find(1)
@test.get_status

К сожалению, этоэто не так, поскольку @test становится активным ресурсом и не может вызвать метод, которого у него нет.(ПРИМЕЧАНИЕ. Мои классы на самом деле не называются MyRecord и MyResource. Для простоты они просто озаглавлены, так как я предпочел бы понять решение, а не предлагать решение за меня.)

Кто-нибудь захочет указать мнеправильное направление, чтобы объяснить, как я вызываю метод активной записи со стороны клиента.Неужели я пошёл совсем не так и должен ли он обрабатываться в контроллере, а не в модели?


С другой стороны: Есть ли альтернативы .save?Моему боссу это не нравится по причинам, которые я не могу понять.(ПРИМЕЧАНИЕ: он ведущий, я стажер, поэтому я не спорю и не задаю вопросы, которые кажутся сложными)

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Вы можете включить результат методов ARecord в данные, поставляемые в вашу модель AResource:

class MyRecord < ActiveRecord::Base
  ...
  def to_xml(options={})
    super(options.merge(:methods => [ :your_method_name_here ]))
  end
  ...
end

Вам потребуется заново создать любые другие методы в модели AResource, которые вы хотите использовать вклиент.(Я не знаю, как puts принадлежит модели ARecord, но делай все, что плавает на твоей лодке.)

0 голосов
/ 13 июля 2011

Честно говоря, ActiveResource нужно немного поработать ... Мне пришлось реализовать именно эту функцию там, где я работаю, и в итоге я развернул свою собственную полу RPC-библиотеку, используя базовый http для обмена кодом между клиентом и сервером.

Действительно, что-то вроде ruby-rpc или DRb , вероятно, будет лучшим вариантом.

...