2016-12-29 55 views
1

我看到这个问题已被问过几次之前(即here,here,只是仅举几例),但我无法得到它与我的情况。我正在使用rails 5.从轨道中的按钮调用控制器方法

我在我的posts_controller中有一个叫做scrape的方法。它创建了几个对象实例。

class PostsController < ApplicationController 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    def scrape 
    destroy_old_data 
    @some_var = Scrape.create("something") 
    end 
    ... 
end 

我想为scrape方法创建一个views/posts/index.html.erb按钮,但我不能让按钮工作。我很习惯使用脚手架方法,我不知道如何创建自定义方法。

一些我试过的方法:

<%= button_to "scrape", action: "scrape"%> 

<%= "scrape me", { :controller => "posts", :action => "scrape"}, class: 'btn btn-primary' %> 

<%= button_to "scrape", posts_scrape_path %> 

如何我index.html.erb触发scrape方法创建一个scrape按钮?我是否也需要修改我的路线?

回答

3

您需要创建一个新的路线以及

post 'scrape' => 'posts#scrape', as: :scrape 

然后,你必须scrape_pathscrape_url

button_to 'Scrape', scrape_path 
+0

感谢访问!有效 :)。如果我添加后续问题,你介意吗?在'post'scrape'=>'posts#scrape',as:scrape' line,'scrape'后的'scrape'是指什么?而''scrape'在'as::scrape'中是指什么? – Iggy

+0

首先'scrape'指的是路线映射到的URL,比如'www.example.com/scrape'。第二个'scrape'是路由的名字,并且由此创建了url助手'scrape_path'和'scrape_url'。 – Iceman

+0

如果我认为它是正确的:如果它说'get'scrape'',它会创建'localhost:3000/scrape'? 关于第二个':scrape',它与第一个有什么不同?非常感谢你的回复!我从中学到很多东西。 – Iggy

相关问题