2014-04-06 52 views
0

我一般鐵軌和網絡語言的新用戶,我想了解的方法調用運行。在我的控制器的方法:Rails的調用方法

def azer 
@usr=User.all 
@test = User.first 
def incr() 
    @test.nbr_set = @test.nbr_set+1 
    @test.save 
end 
incr() 
end 

路線:get "test/azer"

azer.html.erb:

<%= @test.username %></br> 
<%= @test.nbr_set %></br> 

當我刷新頁面,nbr_set正在增加,但我不想用這種方式做到這一點。

在第一時間,我怎麼可以定義將打電話給我的增量()方法的路線?因爲現在,incr()方法被自動調用,這是一個問題。

然後,是有可能使一個Ajax按鈕,誰就會增加nbr_set而無需刷新頁面?我怎樣才能做到這一點?

最後,我想學習使用Ruby AJAX但很難,我不明白我怎麼可以加載一個文件html.erb誰而無需刷新我的網頁更新我的數據庫。

回答

1

首先,incr方法將在您每次撥打azer時重新定義,因爲Ruby本身不支持嵌套方法。

要增加對用戶的數量,你會怎麼做:

# routes.rb 
resources :users do 
    member do 
     put :increment_nbr 
    end 
end 

# users_controller 
respond_to :html, :json 
def increment_nbr 
    @user = User.find(params[:id]) 
    @user.increment! :nbr_set 
    render json: { nbr: @user.nbr_set }.to_json 
end 

# html 
<%= @user.nbr_set %> 
<%= link_to "Increment", increment_nbr_user_path(@user), data-increment %> 

# js 
$("[data-increment]").on("click", function(e) { 
    e.preventDefault() 
    $link = $(this) 
    $.ajax({ 
    url: $link.attr("href"), 
    dataType: "json", 
    type: "PUT", 
    success: function(data) { 
     # data.nbr will be your new count 
     # figure out a way to update the value in the dom here 
    } 
    }) 
}) 
+0

我不明白什麼是塊開始由成員一樣。這一行是什麼:respond_to:html,:json? 請,是否有可能去重寫代碼,而無需JSON?如果不是,你能解釋一下json部分嗎? – user3450044

+0

你或許應該閱讀文檔有關Rails的路線:http://guides.rubyonrails.org/routing.html它很好的解釋。還請閱讀關於ajax請求如何工作的一般信息,因爲這與Rails很少有關。 – Robin