2013-07-22 112 views
0

我as Rails Beginner創建了一個簡單的演示應用程序來試驗嵌套窗體。 但不知何故,我的代碼顯示奇怪的副產品:嵌套窗體顯示太多字段! Rails初學者

enter image description here

我唯一的目的是爲患者對患者創造新的治療顯示網頁,而現在 顯示它與尚未建立治療和其他一些瘋狂的東西輸入字段!我錯了什麼?我到此爲止:

rails new hama 

cd hama 

rails g scaffold Patient name:string 

rails g model Treatment content:string 

rake db:migrate 

患者模型:

attr_accessible :name, :treatments_attributes 
has_many :treatments, :dependent => :destroy 
accepts_nested_attributes_for :treatments 

治療模式:

attr_accessible :content 
belongs_to :patient 

在患者/顯示:

<b>Name:</b> 
<%= @patient.name %> 
</p> 

<p> 
<b>Treatments:</b> 
<%= @patient.treatments.each do |treatment| %> 
    <%= treatment.content %> 
<% end %> 
</p> 

<%= form_for @patient do |f| %> 
    <%= f.fields_for :treatments do |ff| %> 
    <%= ff.text_field :content %> 
    <% end %> 

    <%= f.fields_for :treatments do |ff| %> 
    <%= ff.text_field :content %> 
    <% end %> 

    <%= f.submit %> 
<% end %> 

而且在病人控制器:

def show 
    @patient = Patient.find(params[:id]) 
    treatment = @patient.treatments.build 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @patient } 
    end 
    end 

回答

1

你在談論它在哪裏顯示你的治療對象的所有內部?

更改此:

<%= @patient.treatments.each do |treatment| %> 

這樣:

<% @patient.treatments.each do |treatment| %> 

使用<%= %>,與=,意味着輸出紅寶石線到頁面的搜索結果。沒有它,它只是Ruby運行的代碼。

+0

爲什麼它顯示輸入字段與創建治療?我只需要兩個輸入字段進行新的治療 –

1

首先,你應該從該行刪除=

<%= @patient.treatments.each do |treatment| %> 

你不想顯示each的輸出。循環內容提供輸出。只需使用:

<% @patient.treatments.each do |treatment| %> 

所有其他字段都會被輸出,因爲這就是您的代碼所要求的。你的這部分代碼是顯示所有相同的字段兩次:

<%= f.fields_for :treatments do |ff| %> 
    <%= ff.text_field :content %> 
<% end %> 

<%= f.fields_for :treatments do |ff| %> 
    <%= ff.text_field :content %> 
<% end %> 

如果有一個處理兩個特定輸入字段,然後需要有兩個不同的屬性。

+0

只有兩個輸入字段用於新的治療!謝謝 –

+1

@EmSta我相應地更新了我的答案。你的代碼要求所有的治療屬性兩次。如果你有兩種特定的輸入用於每種治療,那麼他們每個都需要自己的屬性名稱。 – lurker

+0

的事情是,當時我可以更新治療,但我不想要這個。我的目標是創建兩個治療方案,只需點擊一次提交按鈕 –