【问题标题】:Handling columns that need updating after initial creation处理初始创建后需要更新的列
【发布时间】: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

我想到了几个想法:

  1. 在新表单中隐藏 home_team_result 和 away_team_result 并指定默认值 0

  2. 再次隐藏列并使用“添加结果”按钮来显示字段

但我不确定隐藏字段是否是答案,因为这对操纵是开放的。理想情况下,如果有意义的话,我想把一些逻辑放在“Rails 方式”中处理这个问题。

【问题讨论】:

  • 为什么没有属于某个夹具的结果?
  • 我在想,但是夹具永远只有一个结果,所以有什么意义吗?
  • 由你决定,有利有弊。例如你不需要隐藏任何东西,但如果你最终只是这样做unless @fixture.new_record? #put in score fields end

标签: ruby-on-rails ruby forms ruby-on-rails-4 associations


【解决方案1】:

查看错误undefined method error :home_team_result,我们可以说Fixture模型中没有名为home_team_result的字段。

home_team_result 必须是 Fixture 模型中的属性。使其成为虚拟属性(使用attr_accessor)或在fixtures 表中创建一个名为home_team_result 的列。

更新

fixtures 中的实际列名是home_score_resultaway_score_result,而在视图中您访问的是home_team_resultaway_team_result。因此,错误。

【讨论】:

  • 谢谢,但字段存在,我用我的架构更新了我的问题,我需要更改列类型吗?
  • 看一下,它被错误地命名为home_score_result,而你正在调用home_team_result
  • @Richlewis 另外,发现另一列的名称不正确。请参阅答案中的UPDATE 部分。
  • 很高兴为您提供帮助。喝杯热咖啡:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2020-08-17
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多