首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby表单提交到错误的控制器

Ruby表单提交到错误的控制器
EN

Stack Overflow用户
提问于 2018-02-12 22:54:05
回答 1查看 247关注 0票数 1

我有两个表单的视图,我正在尝试提交一个带有链接的表单,该表单链接到一个具有操作的控制器。但是,当我试图将它提交给它时,请在我的另一个控制器中查找操作。我尝试以不同的方式使用参数,但不起作用。我知道我的路径文件有问题,但我不明白是什么问题,因为我是Rails的新手。我也在使用Rails5,如果它有帮助的话。

编辑:第二种形式是失败的形式。

错误:

代码语言:javascript
复制
No route matches {:action=>"scrape", :controller=>"links_to_be_scraped"}

查看:

代码语言:javascript
复制
<%= form_for WatchedLink.new, url: {action: "create"}, html: {class: "links_to_be_scraped"} do |f| %>
  <%= f.text_field (:link) %>
  <%= f.submit "Save" %>
<% end %>
<% @url = 'default' %>
<%= form_for @url, url: {action: "scrape"}, html: {class: "page_scraper"} do |f| %>
  <%= f.text_field (:url) %>
  <%= f.submit "Scrape" %>
<% end %>

控制器:

代码语言:javascript
复制
class PageScraperController < ApplicationController
    require "nokogiri"
    require "open-uri"
    require "diffy"
    require 'htmlentities'

    def scrape

        @url = params[:url]

        page = Nokogiri::HTML(open(@url)).to_s
        coder = HTMLEntities.new
        encodedHTML = coder.encode(page)
        puts page

     end

end

routes.rb

代码语言:javascript
复制
Rails.application.routes.draw do
  root 'links_to_be_scraped#index'

    resources :page_scraper do

        member do
            get :scrape
        end
    end 

    resources :links_to_be_scraped do

        member do
            get :delete
        end
    end



end

路由控制台

代码语言:javascript
复制
       Prefix Verb   URI Pattern                               Controller#Action
                      root GET    /                                         links_to_be_scraped#index
       scrape_page_scraper GET    /page_scraper/:id/scrape(.:format)        page_scraper#scrape
        page_scraper_index GET    /page_scraper(.:format)                   page_scraper#index
                           POST   /page_scraper(.:format)                   page_scraper#create
          new_page_scraper GET    /page_scraper/new(.:format)               page_scraper#new
         edit_page_scraper GET    /page_scraper/:id/edit(.:format)          page_scraper#edit
              page_scraper GET    /page_scraper/:id(.:format)               page_scraper#show
                           PATCH  /page_scraper/:id(.:format)               page_scraper#update
                           PUT    /page_scraper/:id(.:format)               page_scraper#update
                           DELETE /page_scraper/:id(.:format)               page_scraper#destroy
delete_links_to_be_scraped GET    /links_to_be_scraped/:id/delete(.:format) links_to_be_scraped#delete
 links_to_be_scraped_index GET    /links_to_be_scraped(.:format)            links_to_be_scraped#index
                           POST   /links_to_be_scraped(.:format)            links_to_be_scraped#create
   new_links_to_be_scraped GET    /links_to_be_scraped/new(.:format)        links_to_be_scraped#new
  edit_links_to_be_scraped GET    /links_to_be_scraped/:id/edit(.:format)   links_to_be_scraped#edit
       links_to_be_scraped GET    /links_to_be_scraped/:id(.:format)        links_to_be_scraped#show
                           PATCH  /links_to_be_scraped/:id(.:format)        links_to_be_scraped#update
                           PUT    /links_to_be_scraped/:id(.:format)        links_to_be_scraped#update
                           DELETE /links_to_be_scraped/:id(.:format)        links_to_be_scraped#destroy
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 00:39:35

因为你不想在表单提交时发出GET-request请求,所以你应该把抓取路径定义为POST (或者PUT或者PATCH,只要最适合你的需求就行,澄清一下,这个stackoverflow postrails-guide可能会有所帮助)。

因为您目前没有特定的page_scraper对象可以提供给scrape_page路由,所以请完全删除member-block,并将page_scraper路由单独定义为自定义路由。如下所示:

代码语言:javascript
复制
resources :page_scraper
post 'scrape_page', to: 'page_scraper#scrape'

而不是

代码语言:javascript
复制
resources :page_scraper do
  member do
    get :scrape
  end
end

(/page_scraper/:id/scrape VS /page_scraper/scrape)

在此之后,您应该能够将表单页眉更改为如下所示:

代码语言:javascript
复制
form_for @url, url: {controller: 'page_scraper', action: 'scrape'} do |f|

因为这是一个非资源路由的情况,所以这是一个很好的地方,可以清楚地了解它应该如何定义:http://guides.rubyonrails.org/routing.html#non-resourceful-routes

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48749209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档