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

ruby-on-rails – Ruby on Rails嵌套资源未定义的方法路径

发布时间:2020-12-17 03:36:27 所属栏目:百科 来源:网络整理
导读:我在/config/routes.rb中定义了嵌套资源 resources :goals do resources :goal_entries end 目标模型: class Goal ActiveRecord::Base attr_accessible :code,:description,:from_date,:to_date validates_uniqueness_of :code validates_presence_of :code
我在/config/routes.rb中定义了嵌套资源

resources :goals do
    resources :goal_entries
  end

目标模型:

class Goal < ActiveRecord::Base
  attr_accessible :code,:description,:from_date,:to_date
  validates_uniqueness_of :code
  validates_presence_of :code
  has_many :goal_entries,:primary_key => "code",:foreign_key => "goal_code"
  accepts_nested_attributes_for :goal_entries
end

对于GoalEntry:

class GoalEntry < ActiveRecord::Base
  attr_accessible :code,:goal_code,:general_increase_percentage,:general_net_sales,belongs_to :goal,:foreign_key => "goal_code"
  validates_presence_of :code
  validates_presence_of :goal_code
  validates_uniqueness_of :code,:scope => :goal_code
  #validates_numericality_of :general_net_sales

为目标父级创建/编辑GoalEntry的视图如下所示:

<%= form_for([@goal,@goal_entry]) do |f| %>
<% if @goal_entry.errors.any? %>
<div id="error_explanation">
    <h2><%= pluralize(@goal_entry.errors.count,"error") %>
        prohibited this goal_entry from being saved:
    </h2>
    <ul>
        <% @goal_entry.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
        <% end %>
    </ul>
</div>
<% end %>
<div class="field">
    <%= f.hidden_field :goal_code,:required => true%>
</div>
<div class="field">
    <%= f.label :code %>
    <%= f.number_field :code,:required => true %>
</div>
...

目标条目控制器中的更新方法:

def update
    @goal_entry = GoalEntry.find(params[:id])

    respond_to do |format|
      if @goal_entry.update_attributes(params[:goal_entry])
        format.html { redirect_to edit_goal_path(@goal_entry.goal),notice: 'Goal entry was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @goal_entry.errors,status: :unprocessable_entity }
      end
    end
  end

输入有效的目标条目可以正常工作.但如果有验证错误消息,我会收到以下消息:

**NoMethodError in Goal_entries#update**
ActionView::Template::Error (undefined method `goal_entry_path' for #<#<Class:0x007fce30a0c160>:0x00000004199570>):
    1: <%= form_for([@goal,@goal_entry]) do |f| %>
    2: <% if @goal_entry.errors.any? %>
    3: <div id="error_explanation">
    4:  <h2><%= pluralize(@goal_entry.errors.count,"error") %>
  app/views/goal_entries/_form.html.erb:1:in `_app_views_goal_entries__form_html_erb__827873423371803667_70261777948540'
  app/views/goal_entries/edit.html.erb:3:in `_app_views_goal_entries_edit_html_erb__779650500016633360_70261777920720'
  app/controllers/goal_entries_controller.rb:77:in `block (2 levels) in update'
  app/controllers/goal_entries_controller.rb:72:in `update'
    etc...

<%if @ goal_entry.errors.any有什么问题吗? %GT;
如果有人为此提供解决方案,我将不胜感激.谢谢

解决方法

您的form_for正在从[@goal,@ goal_entry]生成其路由,但您尚未在更新操作中定义@goal.

尝试将@goal = Goal.find(params [:goal_id])添加到您的更新方法中.

(编辑:李大同)

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

    推荐文章
      热点阅读