我对铁杆很新。我只是在单击链接时尝试调用函数check(),但每次加载视图时控制器也会调用该函数。
路线: 的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'
答案 1 :(得分:0)
在click函数中添加以下语句以防止调用控制器的操作
function click(event){
event.preventDefault();
your previous app logic
}
答案 2 :(得分:0)
在routes.rb
添加此内容:
get '/articles/check' => 'articles#check', as: :check_article
然后在你看来你应该做这样的事情:
<%= link_to "Check article", check_article_path, remote: true %>
注意remote:
选项,它会告诉rails通过ajax发送请求而不是加载新页面(我假设这是预期的行为)。
现在,由于您通过ajax发送请求,Rails应该使用一些javascript响应请求。在CoffeeScript中会是这样的:
#views/articles/check.js.coffee
$ ->
$("a[data-remote]").on "ajax:success", (e, data, status, xhr) ->
alert "Article was checked."
答案 3 :(得分:0)
你在sever-side
(Rails)&amp; 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();" %>
此是客户端,仅适用于加载到DOM
的元素。它通常用于为应用程序的前端提供额外的功能。