2016-03-14 40 views
1

在rails上寫ruby並使用neo4j數據庫。如何檢查導軌中的關係值?

郵政和用戶是兩個類。標誌是用戶到發佈的關係。

標誌的默認值爲false。如果有人在帖子上貼上國旗。標誌值將變爲true。

標誌類:在崗控制器

class Flag 
include Neo4j::ActiveRel 
include Neo4j::Timestamps 

from_class :User 
to_class :Post 
type :FLAG_POST 

property :flag, type: Boolean 

validates_presence_of :flag 
end 

標誌動作:

def flag 
    flag = Flag.new(from_node: current_user, to_node: @post, flag: true) 

    respond_to do |format| 
    if flag.save 
    format.js { render :index } 
    else 
    format.js { redirect_to post_path, notice: 'Error putting flag on post.'} 
    end 
    end 
end 

查看:

<%= button_to "flag", flag_post_path(post), class: 'btn btn-default', method: :put, data: { confirm: 'Are you sure to flag this post?' }, remote: true %> 

另外,我還要把標誌時添加一個警報。如果該帖子已經放上了標誌,網絡會提醒用戶「該帖子已經被放上了標誌」。我如何檢查標誌值是真是假?我檢查了neo4j圖,並建立了這種關係。但我不知道標誌值是否改變。

我剛開始學習rails和neo4j。感謝您的幫助。

回答

0

您可以使用flag.valid?來檢查對象是否有效保存。

+0

在控制器中?或在視圖文件?什麼是'flag.valid'的類型?我只是嘗試'post.flag.valid?'。它顯示錯誤.. – Helen

+0

對不起,在控制器中你有標誌變量,如果你調用flag.valid?它會返回真或假。 –

+0

它是否與'flag.save'做同樣的事情? – Helen

0

您可以使用jQuery切換點擊值並傳遞更改的值。或者你可以簡單地改變它的值。例如:

$('.js-flag').on('click', function(e){ 
    // you'll need to add that js-flag class to your flag 
    e.preventDefault(); 

    $.ajax({ 
    type: 'GET', 
    url: '/posts/flag', // create this route if doesn't exist 
    data: { 
     // whatever data you want to pass 
     // need to pass the post_id at a minimum 
    } 
    }).done(function(ajax_response){ 
    console.log('success!'); 
    }) 
}) 

確保您的routes.rb文件中有一個標誌位的路由。

控制器內部改變標誌的值。

+0

對不起,我理解你的代碼有點困難......你能解釋一下嗎? thx – Helen

+0

這是jQuery。基本上,代碼會監聽某人何時用js-flag類單擊某個元素。發生這種情況時,它會觸發對控制器操作的請求,然後在該操作中運行代碼。在'.done'部分,你可以調用你的alert('Flagged!')函數。 – toddmetheny