1

わかりましたので、私のモデルとコントローラーを以下に示します。私ができるようにしたいのは、ユーザーが新しいリースを追加するときに、ユーザーがすでにデータベースにあるプロパティのリストからプロパティ ID を選択し、ファイル上のテナントのリストからテナント ID を選択できることです。 . 私はレールに比較的慣れていないので、これをどのように行うのかまったくわかりません。コントローラーに @property = Property.all @tenant = Tenant.all を配置してアクセスできるようにしましたが、必要な方法でそれらを活用する方法がわかりません。

リースモデル

class Lease < ActiveRecord::Base
  attr_accessible :lease_end, :lease_start, :property_id, :tenant_id
  belongs_to :tenant
  belongs_to :property
end

プロパティモデル

class Property < ActiveRecord::Base
  attr_accessible :address_line_1, :city, :county, :image, :rent
  belongs_to :lease
end

テナント モデル

class Tenant < ActiveRecord::Base
  attr_accessible :email, :name, :phone
  belongs_to :lease 
end

新しいリースを追加し、リースを編集するためのリース コントローラ メソッド

 def new
    @lease = Lease.new
    @property = Property.all
    @tenant = Tenant.all
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @lease }
    end
  end

  # GET /leases/1/edit
  def edit
    @lease = Lease.find(params[:id])
    @property = Property.all
    @tenant = Tenant.all
  end

編集: ドロップダウン ボックスは動作しますが、オプションは私が望むものではありません。テナントの # やプロパティの # などのオプションを取得しています。代わりに、テナントの名前とプロパティのアドレスを取得できたらいいのにと思います

tereskoの提案で更新された _form ファイル コード

<%= form_for(@lease) do |f| %>
  <% if @lease.errors.any? %>
    <div id="error_explanation">
       <h2><%= pluralize(@lease.errors.count, "error") %> prohibited this lease from          
          being saved:</h2>
      <ul>
      <% @lease.errors.full_messages.each do |msg| %>
       <li><%= msg %></li>
     <% end %>
     </ul>
    </div>
 <% end %>

 <div class="field">
  <%= f.label :tenant_id %><br />
  <%= f.select :tenant, options_for_select(@tenants) %>
</div>
<div class="field">
  <%= f.label :property_id %><br />
  <%= f.select :property, options_for_select(@properties) %>
</div>
<div class="field">
  <%= f.label :lease_start %><br />
  <%= f.date_select :lease_start %>
</div>
<div class="field">
  <%= f.label :lease_end %><br />
  <%= f.date_select :lease_end %>
</div>
<div class="actions">
  <%= f.submit %>
</div>
<% end %>
4

1 に答える 1

1

最初のヒント:@propertiesではなく、多くのプロパティがある場合に使用することをお勧めします@property。と同じ@tenants

次に、これを新規または編集ページで設定できます。

<% form_for @lease do |f| %>
  <%= f.select :property, options_for_select(@properties) %>
  <%= f.select :tenant, options_for_select(@tenants) %>
<% end %>

次のヒントは、 と が同じフォームをレンダリングしているときに、前のフォームを設定するために部分的な名前を使用することですapp/views/leases/_form.html.erb。次に、新しいビューと編集ビューは次のようになりますnewedit

<%= render :partial => 'form' %>

特定のオプションを表示するには、options_for_select または options_from_collection_for_select ドキュメントを読むことができます

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_select

<%= f.select :property, options_from_collection_for_select(@properties, 'id', 'name') %>

あなたのケースに最適な方法を選択してください。

于 2013-03-22T11:07:03.850 に答える