在我的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]的内容。 提前谢谢
答案 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