2015-02-05 4 views
0

В моем приложении Rails, у меня есть следующие коды:Rails to_json включают метод имеет арг

MemAccount режим

class MemAccount < ActiveRecord::Base 
    attr_accessor :current_mem 
    def followstatus 
    SntFollow.where({:from_id=> current_mem.id}).pluck('to_id').include? id 
    end 
end 

Контроллер:

def search 
    _items = MemAccount.select(:avatar,:nc,:id,:followers).where("nc like '%#{params[:search]}%'") 
    render json:{ 
    :items => _items 
    }.to_json(:methods=>["followstatus"]) 
end 

Как я могу установить экземпляр Attr MemAccount current_mem для списков mem, а не один mem.I хочу найти лучший способ реализовать это, спасибо!

быть честным, я хочу написать так:

class MemAccount < ActiveRecord::Base 
    def followstatus me 
    SntFollow.where({:from_id=> me.id}).pluck('to_id').include? id 
    end 
end 

def search 
    _items = MemAccount.select(:avatar,:nc,:id,:followers).where("nc like '%#{params[:search]}%'") 
    render json:{ 
    :items => _items 
    }.to_json(:methods=>["followstatus(#{current_mem})"]) 
end 

Но результат, как:

{"items":[{"avatar":"tx.png","nc":"","id":1,"followers":1}...]} 

Я cant't найти Аттрибут followstatus, почему ??

ответ

0

Почему вы не используете https://github.com/rails-api/active_model_serializers для сериализации объекта в соответствии с вашими потребностями. Его удобно и очень полезно. И использовать respond_with и respond_to InstEd для format.json

Вы можете создать сериалайзер в

class AccountSerializer < ActiveModel::Serializer 
attributes :name, :method_name, :instane_method_name 

def method_name 
    "value" 
end 
end 

и контроллер

respond_with @accounts, each_serializer: AccountSerializer 
+0

Это не будет работать, потому что 'value' от сессии, поэтому, если многие пользователи посещают это, какое значение должно быть, сеанс отличается, – HXH

+0

, поэтому, пожалуйста, см. дополнение к моему вопросу, я хочу реализовать '.to_json (: methods => [" followstatus (# {current_mem}) "])' – HXH

+0

Вы не проходите мимо g любой current_user для модели/экземпляра. Вы можете использовать значение сеанса в сериализаторе из области видимости. – jbmyid

Смежные вопросы