0

多くの投稿があるストーリー モデルがあります。

story.rb:

  has_many      :posts, :dependent  =>  :destroy

post.rb:

  belongs_to    :story, :touch => true

AJAX を使用してstories#indexアクションに get 要求を行い、そのアクションで、検索パラメーターに準拠するストーリーの配列で構成される応答を生成します。current_userの有無や、検索で記事を検索した日付など、いくつかの追加データを応答に含めます。

  def index
    ajax_response = {}
    ajax_response[:currentUser] = user_signed_in? ? current_user : "no current user"
    searched_through_date = Stories.last.created_at
    @stories = get_stories(params,searched_through_date)
    if @stories && @stories.length << 200
      ajax_response[:stories] = @stories 
      ajax_response[:searched_through_date] = searched_through_date
    else #only happens if there are too many responsive stories
      ajax_response[:error] = {:type => "Response too large", :number_of_stories => @stories.length }
    end 
    render :json => ajax_response
  end

ここで、応答を変更して、返される各ストーリーに、:latest_postそのストーリーに属する最新の投稿で構成される追加の属性 が含まれるようにします。相対的なオブジェクト指向として、この新しい属性/関連付けを含めるようにストーリー オブジェクトを変更するのに問題があります。これは、ストーリー オブジェクトと共に応答の一部としてレンダリングされます。

どんな助けでも大歓迎です!

編集:

get_storiesメソッドの関連部分は次のとおりです。

  def get_stories(params)
    q = get_story_search_params(params) 
    Story.search_with_params(q).limit(q[:limit]).offset(q[:offset])
  end

  def get_story_search_params(params)
    q = {}
    q[:limit] = params[:limit].blank? ? 25 : params[:limit].to_i 
    q[:text_to_search] = params[:text_to_search].blank? ? nil : params[:text_to_search]
    q[:offset] = params[:offset].blank? ? 0 : params[:offset]
    return q
  end
4

1 に答える 1

0

rabl gemの助けを借りてこの問題を解決しました。正しい DSL 構文を考え出すには、少し試行錯誤が必要であることがわかりました。重要なのはobject falsestories/index.json.rablビューで使用し、rabl パーシャルをうまく利用することでした。誰かの助けになることを期待して、ここに作業コードを添付しました。

#stories/index.json.rabl

object false

node(:currentUser) do
  if user_signed_in?
    partial('users/show', :object => current_user)
  else
    "no current user"
  end
end

node(:stories) do 
  partial('stories/list', :object => @stories )
end

node(:searched_through_date) { |m| @searched_through_date }

#stories/show.json.rabl

object @story

attributes  :address, :category, :created_at, :username 

node :latest_post do |story| 
  { :post => partial("posts/show", :object => story.posts.first) }
end

#stories/list.json.rabl

collection @stories, :object_root => "story"

extends "stories/show"

#user/show.json.rabl

object @user

node :user do |u|
  { :email => u.email, :username => u.username, :preferred_post_to_facebook => u.preferred_post_to_facebook, 
    :preferred_tweet_to_twitter => u.preferred_tweet_to_twitter, :home_address => u.home_address, 
    :home_lat => u.home_lat, :home_lng => u.home_lng, :suspended => u.suspended }
end
于 2013-03-09T00:00:33.790 に答える