加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails:更新嵌套属性 – nil的未定义方法`to_s

发布时间:2020-12-17 02:53:05 所属栏目:百科 来源:网络整理
导读:编辑:添加了更新操作,以及错误发生在哪一行 模型: class Match ActiveRecord::Base has_and_belongs_to_many :teams has_many :match_teams has_many :teams,:through = :match_teams accepts_nested_attributes_for :match_teams,:allow_destroy = trueen
编辑:添加了更新操作,以及错误发生在哪一行

模型:

class Match < ActiveRecord::Base  
  has_and_belongs_to_many :teams
  has_many :match_teams
  has_many :teams,:through => :match_teams
  accepts_nested_attributes_for :match_teams,:allow_destroy => true
end

控制器:

def new
    @match = Match.new
    @match_teams = 2.times do
      @match.match_teams.build
    end

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @match }
    end
  end

  def update
    @match = Match.find(params[:id])

    respond_to do |format|
      if @match.update_attributes(params[:match])
        format.html { redirect_to @match,notice: 'Match was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @match.errors,status: :unprocessable_entity }
      end
    end
  end

嵌套模型:

class MatchTeam < ActiveRecord::Base
  belongs_to :match
  belongs_to :team
end

协会:

class Team < ActiveRecord::Base
  has_and_belongs_to_many :matches
end

视图:

<%= form_for(@match) do |f| %>

  <%= f.fields_for :match_teams,@match_teams do |builder| %>
    <%= builder.collection_select :team_id,Team.all,:id,:name,:include_blank => true %>
  <% end %>

  <% unless @match.new_record? %>
    <div class="field">
      <%= f.label :winning_team_id %><br />
      <%= f.collection_select :winning_team_id,@match.teams,:representation %>
    </div>
  <% end %>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

PARAMS:

Processing by MatchesController#update as HTML
Parameters: {"utf8"=>"?£?","authenticity_token"=>"QIJChzkYOPZ1hxbzTZS8H3AXc7i
BzkKv3Z5daRmlOsQ=","match"=>{"match_teams_attributes"=>{"0"=>{"team_id"=>"1","
id"=>""},"1"=>{"team_id"=>"3","id"=>""}},"winning_team_id"=>"3"},"commit"=>"
Update Match","id"=>"2"}

创建与2个团队的新匹配工作正常,编辑视图也显示正确的值,但更新操作给我这个错误.

undefined method `to_sym' for nil:NilClass
app/controllers/matches_controller.rb:65:in `block in update'

line 65: if @match.update_attributes(params[:match])

解决方法

我已经明白了.我读到像MatchTeams这样的连接表不需要ID.我猜这不是做任何嵌套表单时都是如此.我重新删除我的迁移删除了id列的排除,现在一切正常.难道我们都不喜欢这个愚蠢的错误吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读