这是我第一次创建自定义操作,所以我有点不知所措。我创建了一个输入URL的表单。这个URL被传递给我的控制器,在那里我使用该URL解析html(通过Nokogiri)。
我遇到的问题是,我不知道如何使用正在传递的URL参数。
以下是我的控制器中的操作:
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
我得到的错误是undefined method 'url'
。我尝试过做url = :url
甚至url = "#{:url}"
之类的事情,但我没有得到类错误,所以看起来我只是错误地引用了它。
当我按下提交时,参数被正确传递:
{"utf8"=>"✓", "authenticity_token"=>"tGPYiuVO3dtRaNVvd6HAshqpTV7yXCmM1j0dXRSfpR4=", "traveldeal"=>{"url"=>"http://www.sampleurl.com"}, "button"=>""}
以下是视图:
<%= 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 %>
谢谢。
在操作中,url = @traveldeal.url
之前需要@traveldeal = Traveldeal.new(params[:traveldeal])
。
尝试使用params["traveldeal"]["url"]
您从未定义@traveldeal