2016-04-30 18 views
1

この質問からのリレーションを使用してクエリをどこで使うかを学びました。Ruby on Rails whereネスト関係のあるクエリ

Ruby on Rails where query with relations

しかし、私はまだ右のこのネスティングケースでそれをすることはできません。 Summariesコントローラでインデックス作業を行うにはどうしたらいいですか?

モデル

User 
    has_many :projects, dependent: :destroy 
    has_many :reasons, through: :projects 
    has_many :summaries, through: :projects, source: :reasons 
    has_many :entries, through: :projects 

Project 
    belongs_to :user 
    has_many :reasons 
    has_many :entries, through: :reasons 

Reasons 
    belongs_to :project 
    has_many :entries, dependent: :destroy 
    has_many :summaries, dependent: :destroy 

Summary 
    belongs_to :reason 

Entry 
    belongs_to :reason 

EntriesController

# GET /entries 
    def index 
    entries  = current_user.entries 
    updated_at = params[:updated_at] 

    # Filter with updated_at for reloading from mobile app 
    if updated_at.present? 

     # THIS WORKS!!!!!!!!!!!!! 
     entries = entries.joins(:reason).where("reasons.updated_at > ?", Time.at(updated_at.to_i)) 

    # Get all non deleted objects when logging in from mobile app 
    else 
     entries = entries.where(deleted: false) 
    end 

    render json: entries 
    end 

SummariesController

# GET /summaries 
    def index 
    summaries = current_user.summaries 
    updated_at = params[:updated_at] 

    # Filter with updated_at for reloading from mobile app 
    if updated_at.present? 



     #THIS DOES NOT WORK, what can I do????? 
     summaries = summaries.joins(:reason).where("reasons.updated_at > ?", Time.at(updated_at.to_i)) 



    # Get all non deleted objects when logging in from mobile app 
    else 
     summaries = summaries.where(deleted: false) 
    end 

    render json: summaries 
    end 

@ErrorのiOS

エラーにログオン:エラードメイン= com.alamofire.error.seriリクエストに失敗しました:受け入れられないcontent-type:{code} = -1011 "リクエストが失敗しました:内部サーバーエラー(500)" UserInfo = {NSUnderlyingError = 0x1481b9030 {Error Domain = com.alamofire.error.serialization.response Code = text/htmlの」

@Error Herokuの

にログイン[1メートル[36mUserロード(2.0ms)[0メートル[1mSELECT "ユーザー"。* FROM "のユーザーのユーザー" BY ORDER ""。 "ID" ASCのLIMIT 1 0m 2016-04-30T07:48:18.909397 + 00:00 app [web.1]:4msで500の内部サーバーエラーが発生しました(ActiveRecord:2.0ms) 2016-04-30T07:48:18.910250 + 00: 00 app [web.1]:ActiveRecord :: ConfigurationError(Reasonで 'reason'という名前の関連付けが見つかりませんでした。おそらく間違って入力したのでしょうか?):

+0

動作していないものについて具体的に説明できますか? 'summary = summaries.joins(:reason).where(" reasons.updated_at>? "、Time.at(updated_at.to_i))'には何のエラーがありますか? –

+0

エラーログで質問を更新しました。ありがとうございます! –

答えて

1

まず、reasonsを非常に危険な方法で参照しています。 User has_many reasonsprojectsですから、そのルートに行くのはなぜですか?

current_user.joins(:reasons).where(reasons.updated_at > ?", updated_at) 
第二

、そしてあなたのエラーへのより具体的な:projectsはどんなsummariesを持っていないので、あなたの関係の定義has_many :summaries, through: :projects, source: :reasonsが壊れているようです。

Projectモデルにhas_many :summaries, through: :reasonsを追加し、次にhas_many :summaries, through: :projectsUserに使用することをおすすめします。

+0

ありがとうございました!それはあなたが言ったようにモデルを更新することによって働いた! –

関連する問題