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



这是我第一次创建自定义操作,所以我有点不知所措。我创建了一个输入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

相关内容

  • 没有找到相关文章