在另一个视图中使用部分时传递属性

Passing attributes while using a partial inside another view

我有三个模型——公司、用户(使用 Devise)& Donation.Donation 是公司和用户之间使用 :through 的富连接。 我有一个用于在公司的显示视图中创建新捐赠的部分表格,它具有三个属性 - company_id、user_id 和金额。 view里面的form代码如下:

<%= simple_form_for @donation do |f| %>
<div class="row">
  <div class="container">
    <div class="col-sm-6">
      <div class="well">
        <h1 align="center" class="amountHead">Donate</h1>
        <form class="form-inline donate-form">
          <div class="form-group">
            <div class="input-group">
              <div class="input-group-addon">&#8377;</div>
              <%= f.input :amount, label: false, placeholder: 'Amount in Rupees' %>
              <div class="input-group-addon">.00</div>
            </div>
          </div>
          <div class="actions" style="text-align: center">
            <%= f.submit :class => 'btn btn-success' %>
          </div>
        </form>
      </div>
    </div>

如何在用户输入金额时使用当前用户的 ID 和他们正在查看的公司的 ID 自动传递 user_id 和 company_id。

donation_controller.rb

class DonationsController < ApplicationController
  def index
    @donations = Donation.all
  end

  def new
    @donation = Donation.new()
  end

  def create
    @donation = Donation.new(donation_params)

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

  def donation_params
    params.require(:donation).permit(:amount,:user_id,:company_id)
  end
end

company_controller.rb

def show
    @donation = Donation.new
  end

您可以在 form 中为 user_idcompany_id

使用 hidden_field
f.input :user_id, :as => :hidden, :input_html => { :value => current_user.id }
f.input :company_id, :as => :hidden, :input_html => { :value => @company.id }

您需要在 companies_controller show 方法中定义 @company = Company.find(params[:id])