显示操作不起作用

时间:2017-03-09 03:45:00

标签: ruby-on-rails ruby web-scraping nokogiri

我试图在单个展示页面上显示单个已删除的语句,但它无效。

这是我得到的错误:(截图)

enter image description here

这里是带有show动作的控制器:

class LinksController < ApplicationController

        def index 
            @links = Link.all 
        end

        def show
            @link = Link.find(params[:id])
        end 

    def craigslist_scrape
        require 'open-uri'

        url = "https://losangeles.craigslist.org/search/web"

        page = Nokogiri::HTML(open(url))

        @craigslist_info = page.css("ul.rows")

                @link_info = page.css("li.result-row p.result-info a.result-title.hdrlnk")
                @date = page.css("li.result-row p.result-info time.result-date")

            @link_info.each_with_index do |link, index|
            Link.new(:link_info => link.text, :date => @date[index].text).save
            end
    end



   private
    def set_link
      @link = Link.find(params[:id])
    end

    def link_params
      params.require(:link).permit(:link_info, :date)
    end

链接模型:

class Link < ApplicationRecord
end

路线:

Rails.application.routes.draw do
    root 'links#craigslist_scrape'

    resources :links
end

craigslist.html.erb,我也放了show链接:

<% @link_info.each_with_index do |link, index| %>
  <h2><%= "Title of the job: #{link.text}" %></h2>
  <p><%= "Date: #{@date[index].text}" %></p>
  <h6><%= link_to 'Show', link_path(link) %></h6>
<% end %>

show.html.erb:

<p>
  <strong>Link:</strong>
  <%= @link.link_info %>
</p>

<p>
  <strong>Date:</strong>
  <%= @link.date %>
</p>

附加craigslist_scrape.html.erb ...

的屏幕截图

enter image description here

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

在您的craigslist操作中,您可以通过

创建Link
 ...
 ...
 Link.new(:link_info => link.text, :date => @date[index].text).save
 ...
 ...

因此,在show行动中,您可以link_info找到并在您的展示行动中找到:

def show
  @link = Link.find_by(link_info: params[:id])
end

您需要更新craigslist.html.erb

中的代码
<h6><%= link_to 'Show', link_path(link.text) %></h6>

答案 1 :(得分:0)

从你的scrrenshot,我理解link_path(link)craigslist.html.erb行号码:3你正在传递网址。

您应该通过Id Link,如果您想从URL获取链接,那么您可以这样做

Link.find_by_text(params[:id])

如果text是表格中的列。

Link.find_by_link_info(params[:id])