处理初始创建后需要更新的列

时间:2014-04-16 14:55:06

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

我正在寻找如何处理这种情况的最佳做法。我有一个名为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

不确定这是否与我的列设置为:整数的事实有关。

这是我的架构

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)再次隐藏列并有一个按钮&#39;添加结果&#39;揭示领域

但是我不确定隐藏字段是答案,因为它可以操作吗?理想情况下,我想在一个&#39; Rails Way&#39;中处理这个问题。如果这是有道理的

任何帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:2)

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

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

<强>更新

home_team_result中的实际列名称为fixtureshome_score_result,而在视图中您正在访问away_score_resulthome_team_result。因此,错误。