错误:ActionController ::未知格式(对于format.js)

时间:2015-08-09 19:56:46

标签: javascript jquery ruby-on-rails ajax

我正在完成一个项目。我有一个接受网址的搜索字段。提交后,我的代码会从网站上删除数据并将其保存在变量中。我想使用该数据自动填写同一页面上的用户的表单字段。

以下是我目前在视图中的内容:

<%= 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上找到了一些其他资源,但没有任何东西可以解决我需要的这些数据。

干杯。

1 个答案:

答案 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);