我正在嘗試做一些我認爲是非常基本的事情,但我對Rails很陌生,不確定自己做錯了什麼。我已經通過了幾個教程,並尋找答案,並找不到問題所在。將不勝感激任何幫助!在Rails中顯示和編輯has_many對象
我有模式設置,使客戶有哪些有很多里程碑許多項目:
class Client < ActiveRecord::Base
has_many :projects, :dependent => :destroy
end
class Project < ActiveRecord::Base
belongs_to :client
has_many :milestones, :dependent => :destroy
end
class Milestone < ActiveRecord::Base
belongs_to :project
end
路線的設置如下:
resources :clients
resources :milestones
resources :projects do
resources :milestones
end
在項目/ show.html。 erb,我想顯示與項目相關的每個里程碑,並提供一個表單,在同一頁面上添加新的里程碑。當我提交表格時,它添加了一個新的里程碑(UL.card列表中的新LI),但沒有顯示任何值。下面是項目/ show.html.erb代碼:
<h2><%= @project.name %> Milestones</h2>
<ul class="card-list">
<% @project.milestones.each do |m| %>
<li>
<div class="card-header">
<%= m.date %>
</div>
<div class="card-body">
<h3 class="name"><%= m.name %></h3>
<p class="description"><%= m.description %></p>
</div>
</li>
<% end %>
<li>
<div class="card-header">
New Milestone
</div>
<div class="card-body">
<%= form_for [@project,Milestone.new] do |f| %>
<%= f.hidden_field(:project_id, value: @project.id) %>
<div class="field">
<%= f.label :milestone %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %>
<%= f.text_area :description %>
</div>
<div class="field">
<%= f.label :date %>
<%= f.date_field :date %>
</div>
<div class="actions">
<%= f.submit "Add Milestone" %>
</div>
<% end %>
</div>
</li>
</ul>
下面是通過表單中傳來的參數:
Parameters: {
"utf8"=>"✓",
"authenticity_token"=>"3D12GTH+IhwMMQDKsj2l+KXe7OBxmub3eejb3pbpWao=",
"milestone"=>{
"project_id"=>"1",
"name"=>"Test Milestone",
"description"=>"test descrip",
"date"=>"2015-06-26"
},
"commit"=>"Add Milestone",
"project_id"=>"1"
}
里程碑控制器:
def create
@project = Project.find(params[:project_id])
@milestone = @project.milestones.create!(params[milestone_params])
redirect_to @project
end
private
def milestone_params
params.require(:milestone).permit(:name, :description, :completed, :date, :project_id)
end
請讓我知道是否有任何其他信息可以提供幫助。謝謝!
「我想要顯示與項目相關的每個里程碑,並提供在同一頁面上添加新項目的表單。」你的意思是「增加新的里程碑」? – max
正確,增加新的里程碑。謝謝,Maxcal。 – KilgoreTrout