如何引用从控制器中的form_for传递的属性

时间:2012-03-24 19:34:25

标签: ruby-on-rails ruby-on-rails-3 nokogiri

这是我第一次创建自定义操作,所以我有点迷失了。我创建了一个输入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}"之类的操作,但是我得到了nil类错误,因此看起来我只是错误地引用它。

当我按下提交时,参数正确传递:

{"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 %>

感谢。

2 个答案:

答案 0 :(得分:1)

您的行动@traveldeal = Traveldeal.new(params[:traveldeal])之前需要url = @traveldeal.url

答案 1 :(得分:0)

尝试使用params [“traveldeal”] [“url”]

你永远不会定义@traveldeal