Рендеринг с другого контроллера с помощью AJAX - PullRequest
0 голосов
/ 02 января 2012

У меня есть запрос к БД, где я прошу конкретные записи.Это контроллер:

  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 голосов
/ 02 января 2012

Для лучшего качества кода вы должны избегать repititions кода и сделать его многоразовым, переместить эту форму в общий partial view и использовать :url =>{:action => 'my_action'} в теге формы, тогда вы можете использовать его в любом представлении 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' %>

вы даже можете объявить переменные для action и controller в вашем методе index, например

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

и затем в форме

:url =>{:controller => @controller, :action => @action}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...