2012-05-07 2 views
1

Как передать значение из вида в другое представление, чтобы заполнить другую форму в rails 3?Как передать значение из вида в другое представление, чтобы заполнить другую форму в рельсах 3

Я новичок рельсов и я немного путать о том, как достичь этого, вот мой scenerio:

Я генерировал клиент и продажи строительных лесов, то в индексных Клиентах я разместил текстовое поле поиска который ищет клиентов и отображает их ниже. У каждого клиента есть кнопка «Продать», при нажатии на нее необходимо перенаправить вас на новый_sales_path и автоматически заполнить некоторые поля формы со значениями клиента, например, например: имя, адрес, идентификатор, номер телефона и т. Д.

Итак, что я хочу сделать: Я хочу передать информацию о клиенте при нажатии кнопки «Продажи», а затем оформить форму new_sales.

Так у меня есть этот код в индексных клиентах посмотреть:

<%= form_tag clientes_path, :method => 'get', :id => "clientes_search", :class => "form-search" do %> 
<p> 
<%= text_field_tag :search, params[:search], :class => "input-medium search-query" %> 

<%= submit_tag "Search", :name => nil, :class => "btn" %> 

<% @clients.each do |client| %> 
<tr> 
<td><%= client.id %></td> 
<td><%= client.email %></td> 
... 
... 
<%= link_to t('.edit', :default => t("helpers.links.edit")), 
        edit_client_path(client), :class => 'btn btn-mini' %> 
<%= link_to "Sale", new_sale_path, :action => 'sale_button', :id => 'sale_button', :class => 'btn btn-mini' %> 
<% end %> 
</tr> 
<% end %> 

В моем помощнике приложения у меня есть:

def sale_button 
@sale_button = client 
end 

В моих клиентах и ​​контроллерах продаж у меня есть строка:

helper_method :sale_button 

И в моем новом обзоре продаж у меня есть

<div id='sales'> 
<%= simple_form_for @sale, :html => { :class => 'form-horizontal' } do |f| %> 
<%= f.input :client, :label => "Client ID", :required => true, :as => :string, :input_html => { :value => @sale_button.id } %> 
... 
... 
<% end %> 

Я не знаю, правильно ли я делаю это, или если что-то не хватает, любая помощь или ввод приветствуются.

Im с использованием Rails 3.2 BTW


контроллер продаж

class SalesController < ApplicationController 
before_filter :authenticate_user! 
helper_method :sort_column, :sort_direction 
helper_method :boton_venta 


    # GET /sales 
    # GET /sales.json 
    def index 
    @sales = Sale.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 10, :page => params[:page]) 
    @lista_porcentajes = Porcentaje.all 
    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @sales } 
     format.js 
    end 
    end 

    # GET /sales/1 
    # GET /sales/1.json 
    def show 
    @sale = Sale.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @sale } 
    end 
    end 

    # GET /sales/new 
    # GET /sales/new.json 
    def new 
    @sale = Sale.new 
    @client = Client.find(params[:client_id]) 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @sale } 
     format.json { render json: @client } 
    end 
    end 

    # GET /sales/1/edit 
    def edit 
    @sale = Sale.find(params[:id]) 
    end 

    # POST /sales 
    # POST /sales.json 
    def create 
    @sale = Sale.new(params[:sale]) 

    respond_to do |format| 
     if @sale.save 
     format.html { redirect_to @sale, notice: 'Sale was successfully created.' } 
     format.json { render json: @sale, status: :created, location: @sale } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @sale.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /sales/1 
    # PUT /sales/1.json 
    def update 
    @sale = Sale.find(params[:id]) 

    respond_to do |format| 
     if @sale.update_attributes(params[:sale]) 
     format.html { redirect_to @sale, notice: 'Sale was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @sale.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /sales/1 
    # DELETE /sales/1.json 
    def destroy 
    @sale = Sale.find(params[:id]) 
    @sale.destroy 

    respond_to do |format| 
     format.html { redirect_to sales_url } 
     format.json { head :no_content } 
    end 
    end 

    private 

    def sort_column 
    Sale.column_names.include?(params[:sort]) ? params[:sort] : "id" 
    end 

    def sort_direction 
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc" 
    end 
end 

routes.rb

Puntodeventa::Application.routes.draw do 

    resources :empresas 

    resources :cliente_grupo_empresas 

    devise_for :users, :admin_empresas, :empresa_users, :cliente_users, :admins 

    resources :relacion_porcentaje_grupoempresas 

    resources :relacion_grupo_empresas 

    resources :porcentajes 

    resources :categoria_empresas 

    resources :grupo_empresas 

    resources :sales 

    resources :cliente_empresas 

    resources :clients 

    get "home/index" 

    resources :productos 

    root :to => "home#index" 

рейк маршруты

sales GET /sales(.:format)          sales#index 
            POST /sales(.:format)          sales#create 
         new_sale GET /sales/new(.:format)         sales#new 
         edit_sale GET /sales/:id/edit(.:format)        sales#edit 
          sale GET /sales/:id(.:format)         sales#show 
            PUT /sales/:id(.:format)         sales#update 
            DELETE /sales/:id(.:format)         sales#destroy 

продаж new.html.erb

<%- model_class = @sale.class -%> 
<h1><%=t '.title', :default => t('helpers.titles.new', :model =>  model_class.model_name.human, 
           :default => "New #{model_class.model_name.human}") %>  </h1> 
<%= render :partial => 'form' %> 

Форма визуализируется в продаже new.html.erb

<div id='sales'> 

<%= simple_form_for @sale, :html => { :class => 'form-horizontal' } do |f| %> 

    <%= f.input :client, :label => "Serial del cliente", :required => true, :as => :text, :input_html => { :value => ' ' } %> 
    <%= f.association :client, :label_method => :nombre, :label_value => :id, :required => true, :as => :string %> 
    <%= f.association :porcentaje, :label_method => :porcentaje, :value_method => :porcentaje, :required => true %> 
    <%= f.input :monto_venta, :required => true, :as => :string %> 
    <% if current_user.try(:admin?) %> 
    <%= f.association :empresa, :label_method => :nombre, :value_method => :id, :required => true %> 
    <% else %> 
    <% f.association :empresa, :disabled => true, :input_html => { :value => current_user.empresa_id } %> 
    <% end %> 
    <div class="form-actions"> 
    <%= f.button :submit, :class => 'btn-primary' %> 
    <%= link_to t('.cancel', :default => t("helpers.links.cancel")), 
       sales_path, :class => 'btn' %> 
    </div> 
<% end %> 

</div> 

Новый вид продаж с модификацией вы предложили.

<table class="table table-striped"> 
    <thead> 
    <tr> 
     <th><%= sortable "id", "Id" %></th> 
     <th><%= sortable "name", "Name" %></th> 
     <th><%= sortable "grupo_empresa", "Grupo" %></th> 
     <th><%= sortable "telefono", "Telefono" %></th> 
     <th><%= sortable "celular", "Celular" %></th> 
     <th><%= sortable "email", "Email" %></th> 
     <th><%= sortable "serial_cliente", "Serial del cliente" %></th> 
     <th><%= sortable "puntos_cliente", "Puntos del cliente" %></th> 
     <th><%= sortable "created_at", "Creado el" %></th> 
     <th><%=t '.actions', :default => t("helpers.actions") %></th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @clients.each do |client| %> 
     <tr> 
     <td><%= client.id %></td> 
     <td><%= link_to client.nombre, client_path(client) %></td> 
     <td><%= client.grupo_empresa.nombre %></td> 
     <td><%= client.telefono %></td> 
     <td><%= client.celular %></td> 
     <td><%= client.email %></td> 
     <td><%= client.serial_client %></td> 
      <td><%=l client.created_at %></td> 
     <td> 
      <%= link_to t('.edit', :default => t("helpers.links.edit")), 
         edit_client_path(client), :class => 'btn btn-mini' %> 
     <%= link_to "Sale", new_sale_path, :client_id => client.id , :id => 'boton_venta', :class => 'btn btn-mini' %> 
     </td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 

ответ

1

Слушайте внимательно,

Следующая ссылка «Продажа» должен быть где-то в вашем приложении.

<%= link_to "Sale", new_sale_path, :client_id => client.id , :class => 'btn btn-mini' %> 

Если пользователь нажимает на эту ссылку, link_to метод проверки на пути, и вы уже упоминали его как "new_sale_path"

Из ваших "рейк маршрутов",

new_sale GET /sales/new(.:format)         sales#new 

It ясно, что new_sale_path ссылается на sales # new (торговый контроллер, новое действие)

Если вы добавите ссылку подчеркивания, рельсы wi Я позабочусь об этом. Например, edit_sale_path будет выполнять контроллер продаж, редактировать действие/метод.

После этого шага, так как выполняется новое действие в контроллере продаж, рельсы будут искать файл «new.html.erb» в app/views/sales.

Если он существует, этот файл html.erb будет отображаться/отображаться в вашем браузере.

Вы должны понимать приведенную выше работу.

Теперь давайте уточним.

При нажатии этой ссылки на продажу приложение достигает нового действия sales # client_id в качестве параметра в хеше params.

Вы можете получить доступ, что Params хэш следующим образом,

@client = Client.find(params[:client_id]) 

Вы сделали это. Вышеприведенный оператор принимает переданный: client_id как входной сигнал и находит нужного клиента из базы данных с использованием модели клиента и метода поиска.

Теперь переменная экземпляра установлена ​​с записью из таблицы Клиентов, соответствующей: client_id.

Переменная экземпляра - @client.

Теперь, на ваш взгляд, вы можете использовать переменную экземпляра @client следующим образом, которую вы еще не сделали, или Im не видя. Что в приложении/views/sales/_form.html.erb?

Пожалуйста, сообщите об этом тоже.

<%- model_class = @sale.class -%> 
<h1><%=t '.title', :default => t('helpers.titles.new', :model =>  model_class.model_name.human, 
           :default => "New #{model_class.model_name.human}") %>  </h1> 
<%= render :partial => 'form' %> 

Если вы используете form_for, как показано ниже,

<% form_for @client do |client| %> 

<% text_field_tag client.name %> 
- 
- 
- 

<% end %> 

Там будет text_field, который будет предварительно заполняется с именем клиента.

Если вы ничего не понимаете, скажите мне.

Если вы поняли несколько вещей и не могли понять несколько вещей, скажите мне.

Если вы все поняли, скажите мне.

Спасибо.

+0

О, ладно, да, я понимаю, о чем вы говорите, но, возможно, я не объяснял себя должным образом, позвольте мне попробовать. У меня есть 2 таблицы, клиенты и продажи, кнопка продажи, о которой я упомянул, находится в индексном представлении клиентов «app/views/clients/index.html.erb», и он показывает всех клиентов, и каждый клиент имеет кнопку продажи. Когда эта кнопка нажата, она перенаправляет пользователя в новый вид продаж «app/views/sales/new.html.erb», и это работает хорошо, оно перенаправляет меня на него и показывает страницу. То, что я не могу сделать, это передать идентификатор конкретного клиента в новый вид продаж, я не знаю, как это сделать, потому что ... – user1350443

+0

они находятся в разных контроллерах, «app/controllerlers/clients_controller.erb» и «app/controller /sales_controller.erb». Я вставлю индекс индекса клиентов, где появится кнопка продажи, чтобы вы знали, о чем они говорят. – user1350443

+0

Слушайте, попробуйте это, вы передаете идентификатор клиента в качестве параметра в этой ссылке. <% = link_to "Продажа", {: controller => "sales",: action => "new",: client_id => client.id}, {: class => 'btn btn-mini'}%>. Теперь используйте это как ссылку для продажи. Нажмите на нее и скопируйте и вставьте URL-адрес, который вы получаете в адресной строке браузера, после нажатия на него. – beck03076

0

Пропустите client_id как Params по этой ссылке, как,

<%= link_to "Sale", new_sale_path, :client_id => client.id , :class => 'btn btn-mini' %> 

Убедитесь, что new_sale_path попадает в контроллер продаж, новые действия.

В новом доступ действий в client_id как Params [: client_id] и получать текущую запись клиента и визуализации формы с этим следующим образом,

SalesController 

def new 
@client = Client.find(params[:client_id]) 
- 
- 
- 
render 'new' 
end 

По вашему мнению, new.html.erb, вы необходимо написать form_for @client as,

<% form_for @client do |client| %> 

<% text_field_tag client.name %> 
- 
- 
- 

<% end %> 

Теперь, я не уверен относительно моего синтаксиса. Попытайтесь понять, что я здесь делаю.

Спасибо.

+0

Я сделал то, что вы предлагали, и когда он перенаправляет меня на new_sales_path, я получаю следующую ошибку: Не удалось найти Заказчика без ID – user1350443

+0

Пожалуйста, напишите об ошибке. – beck03076

+0

Thats the error, а также он говорит: приложение/контроллеры/sales_controller.rb: 34: in 'new ' – user1350443

Смежные вопросы