2014-01-11 133 views
0

我面臨使用state_machine的問題。我無法找到如何通過AJAX在顯示頁面中更改對象(旅程)的狀態。我是軌道和網絡開發的新手,所以如果可以寫一個簡單的例子,它將是最好的解釋。通過AJAX更改對象的狀態

trip.rb

class Trip < ActiveRecord::Base 
attr_accessible :content, :title 

state_machine :state, initial: :draft do 

    state :draft 
    state :published 

    event :publish do 
    transition :draft => :published 
    end 

    event :hide do 
    transition :published => :draft 
    end 
end 
end 

show.html.erb

<%= button_to 'publish', action: :publish %> 
<%= button_to 'hide', action: :hide%> 

<h3><%= @trip.title %></h3> 
<p><%= @trip.content%></p> 
+0

你提的問題是過於寬泛。 – phoet

+0

@phoet我只是想知道如何改變從「草稿」到「發佈」的行程狀態,反之亦然,在顯示頁面使用AJAX – Igor

+0

然後「只」使用谷歌!有數以百萬計的使用ajax的例子。 – phoet

回答

0

我很欣賞你的問題&會給你一個答案。畢竟,每個人都必須從某個地方開始!


路線

#config/routes.rb 
resources :trip do 
    post :publish 
    post :hide 
end 

生成的URL:domain.com/trips/:id/publish & domain.com/trips/:id/hide


控制器

#app/controllers/trips_controller.rb 
def publish 
    task = Task.find(params[:id]) 
    task.publish! 

    respond_to do |format| 
     format.js 
    end 
end 

def hide 
    task = Task.find(params[:id]) 
    task.hide! 

    respond_to do |format| 
     format.js 
    end 
end 

查看

<%= button_to 'publish', action: :publish, remote: :true, method: :post %> 
<%= button_to 'hide', action: :hide, remote: :true, method: :post %> 

<h3><%= @trip.title %></h3> 
<p><%= @trip.content%></p> 

JS

#app/views/trips/publish.js.erb 
// your JS here 
+0

非常感謝!我明白了主意。但是當我試圖使用這個按鈕時,我得到錯誤'沒有路由匹配[POST]「/ trips/1」 我也改變了一點你的代碼 '<%= button_to'publish',@trip,action ::發佈,遠程:: true,方法:: post%> <%= button_to'hide',@trip,action :: hide,remote :: true,method :: post%>'make ** View * *工作。 – Igor

+0

我認爲新問題是按鈕路徑 - 您剛剛通過實例var。我認爲我們應該使用這個:'<%= button_to'publish',trip_publish_path(@ trip.id),remote :: true,method :: post%>'&'<%= button_to'hide',trip_hide_path(@trip .id),remote::true,method::post%>' –

+0

現在我遇到了這些錯誤'無法找到沒有ID的旅程。 – Igor