2012-03-24 9 views
0

Das ist das erste Mal, dass ich eine benutzerdefinierte Aktion erstelle, also bin ich etwas verloren. Ich habe ein Formular erstellt, in das ich eine URL eintrage. Diese URL wird an meinen Controller übergeben, wo ich die URL zum Parsen von HTML (via Nokogiri) verwende.Wie auf ein Attribut verwiesen wird, das von form_for im Controller übergeben wird

Das Problem, das ich habe, ist, dass ich keine Ahnung habe, wie man diesen URL-Parameter verwendet, der übergeben wird. Hier

ist die Aktion in meinem Controller:

def newdeal 

url = @traveldeal.url #this is where I want to use the URL from my form_for 
doc = Nokogiri::HTML(open(url)) 


title = doc.at_css("#content//h2/a").text 
price = doc.at_css(".integer").text[/[0-9\.]+/] 
link = doc.at_css("#content//h2/a")[:href] 
desc = doc.at_css(".descriptor").text 

Traveldeal.create(:title => title, :price => price, :url => link, :description => desc) 

flash[:success] = "Deal successfully added!" 
redirect_to root_path 
end 

Der Fehler Ich erhalte ist undefined method 'url'. Ich habe versucht, etwas wie url = :url und sogar url = "#{:url}", aber ich bekomme keine Klassenfehler, so dass es scheint, dass ich es nur falsch referenzieren.

Der Parameter wird übergeben korrekt obwohl, wenn ich einreichen drücken:

{"utf8"=>"✓", "authenticity_token"=>"tGPYiuVO3dtRaNVvd6HAshqpTV7yXCmM1j0dXRSfpR4=", "traveldeal"=>{"url"=>"http://www.sampleurl.com"}, "button"=>""}

Hier ist die Ansicht:

<%= form_for @traveldeal, :url => newdeal_path, :method => 'post' do |f| %> 


<div class="field"> 
    <%= f.label :url %> 
    <%= f.text_field :url, :class => "round" %> 
</div> 

<div class="action"> 
    <%= button_tag "", :class => "acctSubmit" %> 
</div> 
<% end %> 

Dank.

Antwort

1

Sie müssen @traveldeal = Traveldeal.new(params[:traveldeal]) vor url = @traveldeal.url in Ihrer Aktion verwenden.

+0

Danke, das hat funktioniert! – gemmy

0

Versuchen params [ "traveldeal"] [ "url"]

Sie nie definieren @traveldeal

Verwandte Themen