2017-03-09 1 views
-1

J'essaie d'afficher une seule instruction raclée sur une seule page d'affichage, mais cela ne fonctionne pas.Afficher l'action ne fonctionne pas

C'est l'erreur que je reçois: (capture d'écran)

enter image description here

Voici le contrôleur avec l'action show en elle:

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 

Lien Modèle:

class Link < ApplicationRecord 
end 

Routes:

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

    resources :links 
end 

craigslist.html.erb, où je mets le lien show ainsi:

<% @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> 

Fixation de la capture d'écran de craigslist_scrape.html.erb ..

enter image description here


enter image description here


enter image description here


enter image description here

+0

Pouvez-vous me dire quelle est la valeur variable 'link' en boucle? – ashvin

+0

@ashvin, je ne sais pas si j'ai bien compris votre question .. laissez-moi savoir si ma réponse ne répond pas ... c'est un lien craigslist ... laissez-moi joindre une capture d'écran de 'craigslist.html.erb' .. L'action 'show' est là pour la capture d'écran postée dans la question ci-dessus ... – user273072545345

+0

@Si vous demandez ce que je vois quand je passe la souris sur l'action show dans la deuxième capture d'écran ... ça commence par' http:// localhost: 3000/links/etc ... '... cela aide-t-il? – user273072545345

Répondre

0

Dans votre action craigslist vous créez Link par

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

Donc, dans votre action show vous pouvez trouver par link_info et dans votre action show devrait être:

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

et vous devez mettre à jour le code dans votre craigslist.html.erb

<h6><%= link_to 'Show', link_path(link.text) %></h6> 
+0

Je reçois une erreur étrange. Vous avez joint une capture d'écran sous '2nd EDIT' ... – user273072545345

+0

@ user27307254534534534543675765 Vous devez créer' show.html.erb' sous le dossier 'links' dans la vue. – ashvin

+0

L'erreur est pour le modèle manquant. – ashvin

0

De votre scrrenshot, je comprends que dans link_path(link) à craigslist.html.erb Ligne n °: 3 vous passez l'URL.

Vous devez passer Id de Link, et si vous voulez obtenir le lien de URL alors vous pouvez faire comme

Link.find_by_text(params[:id]) 

Si le texte est la colonne dans le tableau.


Link.find_by_link_info(params[:id]) 
+0

'text' n'est pas une colonne dans la table Link ... c'est' link_info' et 'date' – user273072545345

+0

Pouvez-vous passer' id' du lien dans 'link_path' si vous avez? – ashvin

+0

@ne suis pas sûr de ce que vous voulez dire, mais quand j'ai survolé le lien show comme vu dans la deuxième capture d'écran, il montre 'localhost: 3000/liens/ALORS-LE-NOM-DU-LIEN ... et j'ai remarqué quelque chose dans le url ... y compris dans la capture d'écran '4th EDIT' – user273072545345