[英]Neo4J Gem - Saving undeclared relationships
我試圖在兩個節點之間創建一個from_node.create_rel("FRIENDS", to_node)
,如此處所述:https: from_node.create_rel("FRIENDS", to_node)
我正在為create_rel
獲取未定義的方法
我究竟做錯了什么? 我正在嘗試在另一個模型中創建一個Q + A系統。 因此,問題和答案現在都被視為模型。
我為#獲取了一個undefined method
create_rel'
event.rb
has_many :out, :event_questions
event_question.rb
has_one :in, :events
has_many :out, :event_answers
def create_questions_of(from_node,to_node)
from_node.create_rel("questions_of", to_node)
end
event_answer.rb
has_one :in, :event_questions
event_questions_controller.rb
def new
#is this needed
end
def create
@event_question = EventQuestion.new(event_question_params)
if @event_question.save
@event = Event.find(params[:id])
@event_question.update(admin: current_user.facebook_id)
@event_question.create_questions_of(self,@event)
redirect_to @event
else
redirect_to @event
end
end
private
def event_question_params
params.require(:event_question).permit(:question)
end
我想在事件的索引頁面中放置新問題,因為我想在此之后列出事件中的所有問題。 我什至不需要控制器中的new
方法,對嗎? 我也真的不知道如何獲得我的問題表格。 通過參數可以訪問嗎?
UPDATE
你是這個意思嗎
def create_questions_of(to_node)
self.create_rel("questions_of", to_node)
end
和
@event_question.create_questions_of(@event)
所以我想我也需要更改路線並將問題嵌套在其中以創建events/123/questions/
然后我可以獲取events_id
並使用find
更新#2
events_controller.rb
def show
@event = Event.find(params[:id])
@event_question = EventQuestion.new
end
event.rb
has_many :out, :event_questions, type: 'questions_of'
event_question.rb
has_one :in, :events, origin: :event_questions
事件/ show.html.erb
<%= form_for [:event, @event_question] do |f| %>
#form stuff
<% end %>
event_questions_controller.rb
def create
@event_question = EventQuestion.new(event_question_params)
if @event_question.save
@event = Event.find(params[:event_id])
@event_question.update(admin: current_user.facebook_id)
@event_question.events << @event
redirect_to @event
else
redirect_to :back
end
end
的routes.rb
resources :events do
resources :event_questions, only: [:create, :destroy]
end
當我剛剛測試時, create_rel
工作。 它是否undefined method 'create_rel' for nil:NilClass
說了undefined method 'create_rel' for nil:NilClass
? 如果是這樣,則意味着您的from_node
變量實際上沒有設置節點。 確保您的對象是您認為的樣子。
更好的問題是:為什么要這樣做? 創建未聲明的關系時,無論何時要使用它,都必須編寫自己的Cypher查詢。 如果它是代碼的一部分並且您定期使用它,則它在模型中可能應該具有has_many
關聯。 create_rel
實際上僅是為了提供與沒有模型的節點的互操作性而存在。
至於其他問題,除非有路線和與之相對應的視圖,否則您無需執行new
操作。 如果您要在索引頁面上加載新問題的表單,那很好。 如果您的網址類似於http://127.0.0.1:3000/events/123/questions/
,則可以在params[:event_id]
獲取事件ID。 從項目目錄中運行rake routes
命令,它將吐出很多信息,包括參數名稱。
最后,當在@event_question.create_questions_of(self,@event)
使用self
時,您將獲得控制器。 如果希望它引用@event_question
,只需從create_questions_of
刪除第一個參數, create_questions_of
在方法中使用self
。
編輯:第2部分
你得到的undefined method
,因為self
於@event_question.create_questions_of(self,@event)
是控制器。 我認為您正在嘗試將@event_question發送給自己。 不這樣做,只需在create_questions_of
調用self
,您將獲得當前的EventQuestion。
您可以使用ActiveRel如果你想回調,驗證,性能等,...如果你只是想要一個簡單的關系,只安裝了has_many
每個模型協會,省略rel_class
和任何一方都設置為相同type
或一組origin
於一。
class Event
include Neo4j::ActiveNode
has_many :in, :event_questions, type: 'questions_of'
end
class EventQuestion
include Neo4j::ActiveNode
has_many :out, :events, origin: :event_questions
end
origin
說:“在對等模型中尋找這種關聯,並使用它定義的類型。” 它使您不必擔心在關聯之間進行類型同步。
之后,您可以執行@event_question.events << @event
,它將為您創建新的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.