【发布时间】:2014-04-16 14:55:06
【问题描述】:
我正在寻找如何处理这种情况的最佳做法。我有一个名为 Fixture 的模型,我在其中为足球比赛创建固定装置,在比赛结束后,我希望能够编辑该固定装置并记录每支球队的结果,但我不确定如何设置我的表格。
理想情况下,我希望能够在不显示结果部分的情况下创建一个新的夹具,然后当我编辑夹具时,表单将包含这些部分,所以是这样的:
新的
<div class="col-md-6 col-md-offset-3 well">
<%= form_for @fixture, html: { multipart: true } do |f| %>
<fieldset>
<!-- Form Name -->
<legend>Create New Fixture</legend>
<div class="form-group">
<%= f.label :tournament_id %>
<%= f.collection_select :tournament_id, Tournament.all, :id, :name, { :prompt => "Please Select a Tournament" }, { class: 'form-control' } %>
</div>
<!-- Text input-->
<div class="form-group">
<%= f.label :home_team %>
<%= f.text_field :home_team, class: 'form-control', placeholder: 'Home Team' %>
</div>
<div class="form-group">
<%= f.label :away_team %>
<%= f.text_field :away_team, class: 'form-control', placeholder: 'Away Team' %>
</div>
<div class="form-group">
<%= f.label :kickoff_time %>
<%= f.time_select :kickoff_time, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.submit 'Submit', :class => 'btn btn-success' %>
</div>
</fieldset>
<% end %>
</div>
编辑
<div class="col-md-6 col-md-offset-3 well">
<%= form_for @fixture, html: { multipart: true } do |f| %>
<fieldset>
<!-- Form Name -->
<legend>Edit Fixture</legend>
<div class="form-group">
<%= f.label :tournament_id %>
<%= f.collection_select :tournament_id, Tournament.all, :id, :name, { :prompt => "Please Select a Tournament" }, { class: 'form-control' } %>
</div>
<!-- Text input-->
<div class="form-group">
<%= f.label :home_team %>
<%= f.text_field :home_team, class: 'form-control', placeholder: 'Home Team' %>
</div>
<div class="form-group">
<%= f.label :away_team %>
<%= f.text_field :away_team, class: 'form-control', placeholder: 'Away Team' %>
</div>
<div class="form-group">
<%= f.label :kickoff_time %>
<%= f.time_select :kickoff_time, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :home_team_result %>
<%= f.text_field :home_team_result, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.label :away_team_result %>
<%= f.time_select :away_team_result, class: 'form-control' %>
</div>
<div class="form-group">
<%= f.submit 'Submit', :class => 'btn btn-success' %>
</div>
</fieldset>
<% end %>
</div>
在尝试访问编辑表单时出现错误:
undefined method error :home_team_result
我不确定这是否与我的列设置为 :integer 的事实有关。
这是我的架构:
create_table "fixtures", force: true do |t|
t.string "home_team"
t.string "away_team"
t.time "kickoff_time"
t.integer "tournament_id"
t.integer "home_score_result"
t.integer "away_score_result"
t.datetime "created_at"
t.datetime "updated_at"
end
我想到了几个想法:
-
在新表单中隐藏 home_team_result 和 away_team_result 并指定默认值 0
-
再次隐藏列并使用“添加结果”按钮来显示字段
但我不确定隐藏字段是否是答案,因为这对操纵是开放的。理想情况下,如果有意义的话,我想把一些逻辑放在“Rails 方式”中处理这个问题。
【问题讨论】:
-
为什么没有属于某个夹具的结果?
-
我在想,但是夹具永远只有一个结果,所以有什么意义吗?
-
由你决定,有利有弊。例如你不需要隐藏任何东西,但如果你最终只是这样做
unless @fixture.new_record? #put in score fields end
标签: ruby-on-rails ruby forms ruby-on-rails-4 associations