使用AJAX从另一个控制器渲染

时间:2012-01-02 17:48:11

标签: ruby-on-rails ruby ajax model-view-controller

我查询了数据库,在那里我要求具体的条目。这是控制器:

  def index

    @contributions = Contribution.all
    @number1 = params[:number1]
    @number2 = params[:number2]
    @itemsok = Contribution.where("first_item_id = ?",@number1).where("first_item_grade = ?",@number2) 


    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @contributions }
    end

好的,我在视图中有一个表单,允许我从用户输入传递数据

<%= form_tag(contribution_path, :method => "get") do %>
  <%= label_tag(:number1, "First Item Id") %>
  <%= text_field_tag(:number1) %>
  <%= label_tag(:number1, "First Item Grade") %>
  <%= text_field_tag(:number2) %>
  <%= submit_tag("Do it!" , :remote => true) %>
<% end %>

完美无缺,但现在我想从主页面索引(display_controller,display index.html.erb)渲染此函数。我把所有的属性都给了display_controller,如下所示:

class DisplayController < ApplicationController
  def index
    @items = Item.all
    @contributions = Contribution.all
    @number1 = params[:number1]
    @number2 = params[:number2]
    @itemsok = Contribution.where("first_item_id = ?",@number1).where("first_item_grade = ?",@number2)
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @contributions }
    end
  end

end

我在贡献视图中的显示视图中有相同的表单.... 现在它的作用是将它重定向到贡献部分,我想要的是在显示视图中渲染结果......

有什么想法?非常感谢你。 抱歉我的英语很糟糕。

#

我明白了

得到答案是将表单更改为选定的操作

<%= form_tag(contribution_path, :method => "get") do %>
  <%= label_tag(:number1, "First Item Id") %>
  <%= text_field_tag(:number1) %>
  <%= label_tag(:number1, "First Item Grade") %>
  <%= text_field_tag(:number2) %>
  <%= submit_tag("Do it!" , :remote => true) %>
<% end %>

将其更改为

<%= form_tag(display_path, :method => "get") do %>
  <%= label_tag(:number1, "First Item Id") %>
  <%= text_field_tag(:number1) %>
  <%= label_tag(:number1, "First Item Grade") %>
  <%= text_field_tag(:number2) %>
  <%= submit_tag("Do it!" , :remote => true) %>
<% end %>

在我的情况下,这在开始时没有工作,但现在我认为这是因为我将display_path作为root_path所以我将其更改为...

<%= form_tag(root_path, :method => "get") do %>
  <%= label_tag(:number1, "First Item Id") %>
  <%= text_field_tag(:number1) %>
  <%= label_tag(:number1, "First Item Grade") %>
  <%= text_field_tag(:number2) %>
  <%= submit_tag("Do it!" , :remote => true) %>
<% end %>

现在它完美无缺。

有人可以改变这个问题来回答,我有21个声望,不能回答我自己的问题。罐。

1 个答案:

答案 0 :(得分:0)

为了更好的代码质量,您应该避免使用repititions代码并重复使用,将该formm移动到公共partial view并在表单标记中使用:url =>{:action => 'my_action'}然后您可以使用它{ {1}} controller查看。在表单操作时,它将从index default进行呈现。

controller

并在控制器各自的索引视图中

share/_form.erb.html

<%= form_tag(:url =>{:action => 'my_action'}, :method => "get") do %>
  <%= label_tag(:number1, "First Item Id") %>
  <%= text_field_tag(:number1) %>
  <%= label_tag(:number1, "First Item Grade") %>
  <%= text_field_tag(:number2) %>
  <%= submit_tag("Do it!" , :remote => true) %>
<% end %>

你甚至可以在索引方法中声明动作和控制器的变量,如

 index.erb.html

 <%= render :partial 'share/form' %>

然后以表格

def index
 // do something
  @action = 'new_action'
  @controller = 'new_controller'
  // do some more thing
end