我正在完成一个项目。我有一个接受网址的搜索字段。提交后,我的代码会从网站上删除数据并将其保存在变量中。我想使用该数据自动填写同一页面上的用户的表单字段。
以下是我目前在视图中的内容:
<%= provide(:title, "New Deal") %>
<h3 class="create">Step 1: <span class="text">Enter the wholesale URL and click add button to create a new deal.</span></h3>
<%= form_tag new_deal_path, id: "search-form", method: :get do %>
<p>
<%= label_tag(:search, "Enter the URL:") %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Add Deal", name: nil, class: "scrape-trigger", remote: true %>
</p>
<% end %>
<% end %>
这是我的控制器动作:
def new
if params[:search]
@response = Deal.search(params[:search])
respond_to do |format|
format.js
end #currently, can't get this to work.
end
@deal = Deal.new
@deal.orders.build
@user = User.new
end
以下是我要填写的表格:
<div class="manual-deal">
<%= f.label :url %><br>
<%= f.url_field :url %><br><br>
<%= f.label :title %><br>
<%= f.text_field :title %><br><br>
<%= f.label :image %><br>
<%= f.file_field :image %><br><br>
<%= f.label :retail_price_cents %><br>
<%= f.text_field :retail_price_cents %><br><br>
<%= f.label :wholesale_price_cents %><br>
<%= f.text_field :wholesale_price_cents %><br><br>
<%= f.label :minimum_bids %><br>
<%= f.number_field :minimum_bids %><br><br>
<%= f.label :estimated_delivery %><br>
<%= f.date_field :estimated_delivery %><br><br>
<%= f.label :delivery_method %><br>
<%= f.select :delivery_method, ['USPS', 'UPS', 'FedEX', 'Shyp', 'Local Pickup'] %><br><br>
<%= f.label :description %><br>
<%= f.text_area :description %><br>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
data-description="Charge"
data-amount="<%=@deal.wholesale_price_cents%>">
</script>
<% end %>
根据另一个问题的建议,我在视图中创建了一个new.js.erb文件,我想要这样做。我以为我可以使用以下方式填充字段:
function ready() {
$('.scrape-trigger').on("click", function() {
$('#deal_url').val(params[:search]);
$('#deal_title').val(title);
$('#deal_image').val(image);
$('#deal_wholesale_price_cents').val(price_range);
$('#deal_description').val(description);
});
};
$(document).on('ready page:load', ready)
对这最后一部分不太确定。有人能指出我正确的方向吗?我已经被困在这几个小时,并没有找到一个像样的解决方案。我在Ajax上找到了一些其他资源,但没有任何东西可以解决我需要的这些数据。
干杯。
答案 0 :(得分:0)
我假设@response
包含填写表单时您需要的所有信息。 (另请注意,@deal
和@user
将无法用于new.js.erb
,因为它们是在您呈现该文件后定义的。)
此.js.erb
文件只渲染一次,完全呈现时。因此,您不必担心任何$(document).on('ready page:load', ready)
废话。您不希望在页面加载时运行此代码,您希望它在呈现文件时运行。摆脱它!
你应该只留下.val()
行。这是设置事物价值的好方法,但此文件不知道params[:search]
或title
是什么。您传递给此文件的唯一变量是@response
。使用它!
所以你最终应该得到以下内容:
$('#deal_url').val(@reponse.url);
$('#deal_title').val(@reponse.title);
$('#deal_image').val(@reponse.image);
$('#deal_wholesale_price_cents').val(@reponse.price_range);
$('#deal_description').val(@reponse.description);