2014-01-11 96 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