【问题标题】:ROR: Nested Resources: NoMethodErrorROR:嵌套资源:NoMethodError
【发布时间】:2013-08-21 02:42:15
【问题描述】:

在我的应用程序中,创建团队是为了解决挑战。创建团队后,成员可以加入该团队。

在创建挑战 -> 团队时一切正常,但在添加团队成员时,我收到此错误:

错误

Team_members 中的 NoMethodError#new

显示 /home/vincent/solvabl/app/views/team_members/_form.html.erb 提出第 1 行的位置:

undefined method `team_team_members_path' for #<#<Class:0x9bdadcc>:0xa179df0>

提取的源代码(第 1 行附近):

1: <%= form_for([@challenge,@team,@team_member]) do |f| %>
2:   <% if @team_member.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@team_member.errors.count, "error") %> prohibited this team_member from being saved:</h2>

模板包含的痕迹:app/views/team_members/new.html.erb

Rails.root: /home/vincent/solvable 应用程序跟踪 |框架跟踪 |全程跟踪

app/views/team_members/_form.html.erb:1:in `_app_views_team_members__form_html_erb___477348688_81202980'
app/views/team_members/new.html.erb:3:in `_app_views_team_members_new_html_erb___135218923_85112930'
app/controllers/team_members_controller.rb:36:in `new'

请求

参数:

{"challenge_id"=>"1",
 "team_id"=>"1"}

显示会话转储

显示环境转储 回应

标题:

None

路线

resources :challenges do
  resources :teams do
    resources :team_members
  end
end

控制器

def create
    @team_member = TeamMember.new(params[:team_member])
    @team_member.team_id = @team.id
    @team_member.user_id = current_user.id

    respond_to do |format|
      if @team_member.save
        format.html { redirect_to [@team,@team_member], notice: 'Team member was successfully created.' }
        format.json { render json: [@team,@team_member], status: :created, location: [@team,@team_member] }
      else
        format.html { render action: "new" }
        format.json { render json: @team_member.errors, status: :unprocessable_entity }
      end
    end
  end

查看

<%= form_for([@team,@team_member]) do |f| %>
  <% if @team_member.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@team_member.errors.count, "error") %> prohibited this team_member from being saved:</h2>

      <ul>
      <% @team_member.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :team_id %><br />
    <%= f.number_field :team_id %>
  </div>
  <div class="field">
    <%= f.label :user_id %><br />
    <%= f.number_field :user_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

非常感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails form-for nested-resources


    【解决方案1】:

    你拥有的路线会给你challenges_team_team_members_path。为了获得team_team_members_path,请将以下内容添加到您的config/routes.rb

    resources :teams do 
      resources :team_members
    end
    

    更新:

    请注意,此添加应该是对您已经定义的内容的补充。因此,您的 routes.rb 将具有:

    resources :challenges do
      resources :teams do
        resources :team_members
      end
    end
    
    resources :teams do 
      resources :team_members
    end
    

    【讨论】:

    • 谢谢 vinodadhikary 这实际上很有意义。当我回到我的电脑时,我会试试这个。我会告诉你这是否有效。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多