【问题标题】:How do you select a record in a form and show calculations based on that record?如何在表单中选择记录并显示基于该记录的计算?
【发布时间】:2015-02-23 22:44:04
【问题描述】:

我需要知道如何制作一个表格,您可以在其中选择一条记录,根据该记录进行一些计算并显示结果(最好在同一页面上)。

为了尽可能简单,假设我想从 User 模型中选择一条记录并显示他的大写电子邮件。

所以结构是:

capitalized_controller.rb

class CapitalizedController < ApplicationController
  before_action :authenticate_user!

  def users
    @users = User.all
  end
end

大写/users.html.erb:

<%= form_tag('/capitalized/users') do %>
    <div class="controls">
        <%= select_tag :email, options_from_collection_for_select(@users, "id", "email"), :class => 'text_field' %>
    </div>
  <div class="form-actions">
    <%= submit_tag nil, :class => 'btn btn-primary' %>
  </div>
<% end %>

它的显示如下:

所以,直到这里它向我显示了按字母顺序排序的用户电子邮件列表,我可以点击发送按钮(“Enviar”)并且它运行完美(到目前为止我没有错误),但它只会再次加载页面,我应该怎么做才能显示大写的电子邮件?

【问题讨论】:

  • 您有两个选择,或者使用 AJAX,或者如果您已经拥有在用户模型中进行这些计算所需的一切,然后隐藏该信息,并使用 javascript 显示/隐藏它。无论你想要什么。 Rails 有一些表单助手来构建 ajax 表单。祝你好运!

标签: ruby-on-rails ruby forms ruby-on-rails-4 post


【解决方案1】:

在你的控制器中改变这个:

def users
  @users = User.all
  @var_to_show_user =  User.search(params[:search_user])
end

在你的模型中这样做:

def self.search(search_mail)  
  if search  
    where('mail = ?', search_mail )  
  else  
    scoped  
  end  
end  

在你看来:

<%= form_tag('/capitalized/users') do %>
   <div class="controls"><%= select_tag :email, options_from_collection_for_select(@users, "id", "email"), :class => 'text_field' %></div>
   <div class="form-actions"><%= submit_tag nil, :class => 'btn btn-primary' %></div>
<% end %>

<% @var_to_show_user.each do |result| %>
  <%= result.mail.to_s.first.upcase   %>
<% end %>

注意:

"mail" is the column's name

"to_s" is to convert to string

"first" is to show the first letter

"upcase" is to show the value capitalize

希望这可行……祝你好运。

【讨论】:

    【解决方案2】:

    嗯,最后我唯一要做的就是:

    capitalized_controller.rb

    class CapitalizedController < ApplicationController
      before_action :authenticate_user!
    
      def users
        @users = User.all
    
        if params[:user]
          @result = User.all.find(params[:user])
          @result = @result.email.capitalize!
        else
          @result = nil
        end
      end
    end
    

    大写/users.html.erb:

    <%= form_tag('/capitalized/users', :method => "post", id: "capitalize-form") do %>
        <div class="controls">
            <%= select_tag :user, options_from_collection_for_select(User.all, "id", "email", params[:user]), :class => 'text_field' %>
        </div>
      <div class="form-actions">
        <%= submit_tag 'Capitalize email', :class => 'btn btn-primary' %>
      </div>
    <% end %>
    
    <% if @result %>
        <p><%= @result %></p>
    <% end %>
    

    它是这样显示的:

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多