通过单击在同一站点上呈现对象属性

时间:2014-11-21 21:15:38

标签: ruby-on-rails ruby click

我的网络应用中有这个按钮/链接。这是一个披萨的按钮 - 价格,成分和类别的margherita,都已加载到数据库。单击此按钮可将项目的id加载到params,然后用于查找对象。

我想点击以启动以下事件链:

  1. 加载ID
  2. 按ID
  3. 查找对象
  4. 在同一网站上的相邻div中即时呈现对象及其属性
  5. 这可能没有JavaScript,只有Ruby on Rails吗? 我被困在第3点。我有一个想法,但不完整。请给我一个提示。

    PS。我的想法是为索引呈现视图并在彼此相邻的单独div中显示。

    @NickM,我添加了您的代码,并在ActionController::UnknownFormat方法中指向respond_to do |format|时抛出show_pizza错误。

    这是我的pizzas/index.html.haml

    %h1= t :all_pizzas
    - @pizzas.each do |pizza|
      = render pizza
    .orders
      %h1 Orders
    

    pizzas/_pizza.html.haml

    %tr
      = link_to pizza.name, show_a_pizza_path(pizza.id), :method => :post
      %br/
    

    点击_pizza.html.erb中的链接后出现此错误。我的show_pizza.js现在是:

    pizza_div = $("#orders");
    pizza_div.html( "<%= j render( :partial => 'pizzas/pizza', :locals => { :pizza => @pizza } ) %>" );
    

    我错过了什么?对不起,我不知道js。

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的。单击链接时,您需要渲染另一个页面或使用Javascript处理控制器返回的数据。最好的选择是设置一个响应JSON的动作,并解析你在前端得到的内容。

即使你的P.S.你将不得不使用Javascript处理来自服务器的响应,除非您可以渲染新页面。您需要发布一些代码,最好是路由和控制器操作。这也可行:

<%= link_to("Show Pizza", show_a_pizza_path(@pizza.id), :method => :post, :data => {:remote => true}) %>

的routes.rb

post 'show_pizza/:id' => "pizzas#show_pizza", :as => :show_a_pizza

pizzas_controller.rb

def show_pizza
  @pizza = Pizza.find(params[:id])
  respond_to do |format|
    format.js
  end
end

视图/比萨饼/ show_pizza.js

pizza_div = $("#the_name_of_your_div");
pizza_div.html( "<%= j render( :partial => 'pizzas/pizza', :locals => { :pizza => @pizza } ) %>" );

然后将披萨标记放在/views/pizzas/_pizza.html.erb