【问题标题】:Show all authorizations by registers按寄存器显示所有授权
【发布时间】:2016-04-13 00:37:33
【问题描述】:

我有这个问题:

我有一个控制器:

  def index
    if params[:search_employee_by_cpf].present?
      @employees = Employee.search_cpf(params[:search_employee_by_cpf]).all
      @authorizations = Authorization.search_employee_by_cpf(params[:search_employee_by_cpf]).all
    end
  end

模型授权:

  scope :search_employee_by_cpf, -> (cpf) { Authorization.joins("INNER JOIN employees ON employees.id = authorizations.employee_id INNER JOIN people ON employees.person_id = people.id").where("people.cpf LIKE ?", "%#{cpf}%") }

和模型员工:

  scope :search_cpf, -> (cpf) { joins(:person).where("people.cpf LIKE ?", "%#{cpf}%") }

我需要两个寄存器/矩阵,并且我需要为每个寄存器/矩阵显示授权。实际上,显示每个寄存器的所有授权,这是错误的!我只想显示各个寄存器的授权。这是怎么做的?

更新 --------------

这是我对演出授权负责的部分观点

<% @authorizations.each do |authorization| %>
            <tr>
              <td><%= check_box_tag 'authorization[contract_ids][]', authorization.contract_number %></td>
              <td><%= authorization.contract_number %></td>
              <td><%= number_to_currency authorization.parcel_value %></td>
              <td><%= authorization.qtd_parcel %></td>
              <td><%= number_to_currency authorization.total_value %></td>
              <td>
                <%= simple_form_for('/', remote: true) do |f| %>
                  <%= f.input :value_solve, label: false, placeholder: "Digit a value" %>
                  <%= f.submit 'Gravar valor' %>
                <% end %>
              </td>
            </tr>
          <% end %>

更新 2 -------------

  def new
    if params[:authorization]
      @selected_ids = params[:authorization][:contract_ids]
      @authorizations = Authorization.where("contract_number in (?)", @selected_ids)
    end
    @employee = Employee.search_cpf(params[:search_employee_by_cpf])
    @refinancing = Refinancing.new
  end

new.html.erb(勾选后点击按钮进入新建)

<table class="table table-condensed table-bordered">
  <tr>
    <td>Name:</td>
    <td><%= @employee.person.name %></td>
  </tr>
  <tr>
    <td>CPF:</td>
    <td><%= @employee.person.cpf %></td>
  </tr>
</table>

【问题讨论】:

  • 您也可以在这里发布您的视图文件和模型关系吗?
  • cpf 只是 people 表的一列吗?
  • 您可以在这里发布您的架构吗?模型关系很难猜
  • cpf 只是一个列 people 表
  • 除非我理解你的意图错误,例如一个employee 可以有多个people,否则你不需要Authorization 中的范围方法,因为除非一个员工可以有不同的人,他们的授权都将具有相同的cpf,因此使用cpf过滤授权是没有用的

标签: sql ruby-on-rails ruby ruby-on-rails-4 rails-4-2-1


【解决方案1】:

看了你的数据库表之后,我有一个问题。似乎一个employee 只能有一个包含cpfperson,在这种情况下,我认为不再需要Authorization 中的范围方法。因为显然每个employee 的授权都只有一个cpf。你可以简单地做

@employees = Employee.search_cpf(params[:search_employee_by_cpf]).includes(:authorizations)

在你看来,改变

<% @authorizations.each do |authorization| %>
  <tr>
    <td><%= check_box_tag 'authorization[contract_ids][]', authorization.contract_number %></td>
    <td><%= authorization.contract_number %></td>
    <td><%= number_to_currency authorization.parcel_value %></td>
    <td><%= authorization.qtd_parcel %></td>
    <td><%= number_to_currency authorization.total_value %></td>
    <td>
      <%= simple_form_for('/', remote: true) do |f| %>
        <%= f.input :value_solve, label: false, placeholder: "Digit a value" %>
        <%= f.submit 'Gravar valor' %>
      <% end %>
    </td>
  </tr>
<% end %>

<% employee.authorizations.each do |authorization| %>
  <tr>
    <td><%= check_box_tag 'authorization[contract_ids][]', authorization.contract_number %></td>
    <td><%= authorization.contract_number %></td>
    <td><%= number_to_currency authorization.parcel_value %></td>
    <td><%= authorization.qtd_parcel %></td>
    <td><%= number_to_currency authorization.total_value %></td>
    <td>
      <%= simple_form_for('/', remote: true) do |f| %>
        <%= f.input :value_solve, label: false, placeholder: "Digit a value" %>
        <%= f.submit 'Gravar valor' %>
      <% end %>
    </td>
  </tr>
<% end %>

【讨论】:

  • 得到一个错误,我等于你做了......在员工身上找不到名为“授权”的协会;也许你拼错了?
  • 在您的 Employee 模型中,添加 has_many :authorizations,您的 Authorization 模型中有 belongs_to :employee。我想你错过了
  • 不幸的是,这不好,因为从您的图表来看,cpf 在Person 模型中不是唯一的。
  • 尝试在new 操作中描述您的逻辑,您要查询哪个员工?如果您仅使用 cpf 进行搜索,则在第一张图中显示的情况下,您会找到两个员工,而不是一个
猜你喜欢
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多