2012-04-29 7 views
0

has_one(class_nameオプション付き)とbelongs_toの関係を通して2つの子オブジェクトに値を設定するフォームを作ろうとしています。しかし、フォームから値を入力して送信すると、異なる値を入力しても両方の子オブジェクトが同じ値を持ちます。has_one with:class_name、belongs_to relationが正しく属性をレールに設定していない3.2.3

私はこれら2つのモデルを持っています。 は次のように部分的に使用して

class Route < ActiveRecord::Base 
    attr_accessible :name, :destination_attributes, :origin_attributes            
    has_one :origin, :class_name=>"Place" 
    has_one :destination, :class_name=>"Place" 
    accepts_nested_attributes_for :origin, :destination 
end 

class Place < ActiveRecord::Base                                    
    attr_accessible :address, :lat, :lng, :name, :route_id 
    belongs_to :route, :foreign_key => "route_id" 
end 

そして作られたフォーム(2人の子供は、上記の「起源」と、そのクラスの名前である「場所」「目的地」を示すオブジェクト)。

ルート/ _form.html.erb

<%= form_for(@route) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    <br /> 
    <%= render :partial => "places/nested_places_form", :locals => {record_name: :origin, place_object: @route.origin, parent_form: f} %> 
    <br /> 
    <%= render :partial => "places/nested_places_form", :locals => {record_name: :destination, place_object: @route.destination, parent_form: f} %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

場所/ nested_places_form.html.erb

<%= parent_form.fields_for record_name, place_object do |t| %>                            
    <%= record_name %> 

    <% if place_object.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@place.errors.count, "error") %> prohibited this place from being saved:</h2> 

     <ul> 
     <% @place.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= t.label :name %><br /> 
    <%= t.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= t.label :lat %><br /> 
    <%= t.text_field :lat %> 
    </div> 
    <div class="field"> 
    <%= t.label :lng %><br /> 
    <%= t.text_field :lng %> 
    </div> 
<% end %>                                          

私が述べたように、出発地と目的地の属性は常に終わります空白に異なる値を入れてフォームから送信しても同じです。

どうすればこの作品を作成できますか?

答えて

0

何らかの理由で、データベースの起点と目的地を区別する必要があります。両方が同じクラスを持ち、同じテーブルに格納されている場合、それらを区別することはありません。あなたは既存の関係を変更したくない場合は、出発地と目的地の異なるクラスを、このためにSTIを使用して作成する必要があるかもしれません:これは、場所テーブルにtypeフィールドが必要になります

class OriginPlace < Place 
end 

class DestinationPlace < Place 
end 

class Route < ActiveRecord::Base 
    ... 
    has_one :origin, :class_name=>"OriginPlace" 
    has_one :destination, :class_name=>"DestinationPlace" 
    ... 
ene 

+0

私はそれが不可能であることを知らなかった、これは私が望んでいたものです!私が試してみます!どうもありがとうございました!! – Ryo

関連する問題