2016-02-13 16 views
1

我對rails非常陌生。我試圖只在單擊鏈接時調用函數check(),但控制器也會在每次加載視圖時調用該函數。使用link_to僅在鏈接被點擊時調用rails中的函數

途徑: routes.rb中

Rails.application.routes.draw do 
    get 'welcome/index' 

    resources :articles 

控制器: articles_controller.rb

class ArticlesController < ApplicationController 
    helper_method :check 
    def new 
    end 

    def create 
     @article = Article.new(article_params) 

     @article.save 
     redirect_to @article 
    end 

    def check 
     puts "check" 
    end 

    def show 
     @article = Article.find(params[:id]) 
    end 

    def index 
     @articles = Article.all 
    end 

    private 
     def article_params 
      params.require(:article).permit(:title, :text) 
     end 

型號: article.rb

class Article < ActiveRecord::Base 

end 

查看: index.html.erb

<h1> 
    <%= link_to 'Call on click', :onclick => check() %> 
</h1> 
+0

我錯過了,你在*鏈接字符串的構造過程中*打*檢查。 –

回答

0

如果你想從link_to調用一些途徑試圖

link_to "Call on click", controller: "articles", action: "check"

,然後只需添加路由get 'articles/check'

0

在你的點擊函數中添加以下語句以防止控制器的操作被調用

function click(event){ 
    event.preventDefault(); 
    your previous app logic 
} 
0

在你routes.rb補充一點:

get '/articles/check' => 'articles#check', as: :check_article 

然後在你的觀點,你應該做這樣的事情:

<%= link_to "Check article", check_article_path, remote: true %> 

通知的remote:選項,它會告訴軌送請求通過ajax而不是加載一個新的頁面(我假設這是預期的行爲)。

現在,由於您通過ajax發送請求,因此Rails應該用一些javascript響應請求。請問是這樣的在CoffeeScript中:

#views/articles/check.js.coffee 
$ -> 
    $("a[data-remote]").on "ajax:success", (e, data, status, xhr) -> 
    alert "Article was checked." 
0

你得到之間sever-side(Rails)的混淆& client-side(JS)事件。


考慮以下幾點:

#config/routes.rb 
resources :articles do 
    get :check, on: :collection #-> url.com/articles/check 
end 

#app/controllers/articles_controller.rb 
class ArticlesController < ApplicationController 
    def check 
    # do something 
    end 
end 

以上將允許您使用...

<%= link_to "Check", articles_check_path %> 

這將觸發每一個鏈接 「點擊」 時,的確它會導致您的瀏覽器將您帶到您嘗試查看的新操作/視圖。

以上是服務器端的功能。這是標準HTTP


你混淆了以上的JavaScript

#app/assets/javascripts/application.js 
var check = function() { 
    // do something 
} 

以上是客戶端,並且只能用在JavaScript中onclick/.on("click"事件處理函數中調用:

<%= link_to "Check", some_path, onclick: "return check();" %> 

This是客戶端,僅適用於加載到DOM中的元素。它通常用於爲應用程序的前端提供額外的功能。

相關問題