从URL读取Rails数据库值

时间:2016-04-04 09:31:47

标签: ruby ruby-on-rails-4

在我的ruby on rails项目中,我有一个共享模型,它存储共享基本值,如共享名称,市值,当前值,账面价值等。在rails中,当我想创建新的共享记录时,而不是用户输入详细信息,我希望他们从金融网站输入一个URL,我希望我的代码从金融网站读取共享基本参数。 URL未存储在数据库中。

例如:如果用户输入http://www.moneycontrol.com/india/stockpricequote/food-processing/nestleindia/NI。我的代码应该读取以下参数并将其存储在数据库中。  名称:雀巢,价格:5628,市值:54,366.89,账面价值:352.69等

我使用Nokogiri阅读网页。由于从网上阅读需要时间,我也必须使用delayed_job。   我的new.html.erb只有一个输入,它是一个URL,它发送一个帖子请求到“创建”动作。现在URL不是我的模型的一部分。我在模型中声明了一个:url参数,如下所示:

 class Share < ActiveRecord::Base
     attr_accessor :url
 end

现在我对如何在我的模型/控制器中处理这个URL感到困惑。哪个是实现URL读取方法的最佳位置?是控制器还是型号?    如果我将url传递给model,如何实现获取url的方法并读取参数?   如果我读取控制器中的参数,我该如何将它们传递给模型?

我也无法访问控制器内的url参数。当我调用我的方法来阅读网页时,我收到一条错误消息,说明了空网址:

我的new.html.erb:

 <%= form_for(@share)    do |f| %>
 <p>
      <%= f.label :url %>
      <%= f.text_field :url, autofocus: true %>
 </p>
 <p>
 <%= f.submit 'Pull the data'%>
 </p>
 <% end %>

我控制器中的当前创建方法:

 def create
   @url = params[:url]
   #readShareBasic(url) is a method to read the website and return a hash
   @share = Share.new(readShareBasic(url)).permit(:name, :current_price, :year_low, :year_high, :current_PE_ratio, :market_cap, :book_value, :description, :price_to_book_value))
redirect_to shares_url

在控制器中,我无法访问params [:url]的内容。 提前谢谢

1 个答案:

答案 0 :(得分:0)

使用controller create方法获取url并创建/保存新的共享实例。您不需要模型中的访问者。如果查看表单的源代码,您将看到表单数据的传递方式。

在控制器中,最好将强对数分离为自己的方法。

def
  @url = params[:share][:url]
  @share = Share.new(share_params)
  @share_details = readShareBasic(@url)
  # assign values from readShareBasic to the share instance as needed
  # save share
end

private
def share_params
  params.require(:share).permit(:name, :current_price, :year_low, :year_high, :current_PE_ratio, :market_cap, :book_value, :description, :price_to_book_value, :url)
end