首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套窗体不保存

嵌套窗体不保存
EN

Stack Overflow用户
提问于 2017-10-08 17:53:04
回答 1查看 71关注 0票数 0

我是新来的do rails和MVC。我试图将我使用简单表单和嵌套表单创建的嵌套表单保存到我的数据库中。当我提交表单时,只创建并保存“父”模型。非常感谢。

“父母模式”:

代码语言:javascript
复制
class Diet < ApplicationRecord
    belongs_to :coach

    has_many :user_eat_diets
    has_many :user, through: :user_eat_diets
    accepts_nested_attributes_for :user_eat_diets

    has_many :diet_composes
    has_many :foods, through: :diet_composes
    accepts_nested_attributes_for :diet_composes
end

“儿童”模型:

代码语言:javascript
复制
class DietCompose < ApplicationRecord
    belongs_to :diet
    belongs_to :food
end

“家长”控制器:

代码语言:javascript
复制
class DietsController < ApplicationController
    def new
        @diet = Diet.new
        @diet.diet_composes.build
    end

    def create
        @diet = Diet.new(diet_params)
        if @diet.save
            flash[:success] = "success"
        end
    end
    def diet_params
      params.require(:diet).permit(:name, :coach_id, :diet_composes_attributes)
    end

end

“儿童”控制器:

代码语言:javascript
复制
class DietComposesController < ApplicationController
    def new
        @diet_compose = Diet_compose.new
    end

    def create
        @diet_compose = Diet_compose.new(diet_compose_params)
        if @diet_compose.save
            flash[:success] = "success"
        end
    end

    def diet_compose_params
      params.require(:diet_compose).permit(:quantity, :hour, :day, :food_id, :diet_id)
    end
end

表格视图:

代码语言:javascript
复制
<%= simple_form_for @diet, :html => {:class => 'form-basic' }  do |f| %>
            <%= f.input :name %>
            <%= f.input :coach_id %>
            <%= f.nested_fields_for :diet_composes do |ff| %>
                    <%= ff.remove_nested_fields_link %>
                    <%= ff.input :hour %>
                    <%= ff.input :day %>
                    <%= ff.input :food_id %>
                    <%= ff.input :diet_id %>
                <% end %>
            <%= f.add_nested_fields_link :diet_composes %>
            <%= f.button :submit %>
        <% end %>

另外,当我执行命令时

Diet_compose.all

在rails控制台上,我得到了错误

/home/tanaka/Desktop/E-xercite/app/models/diet_compose.rb :无法自动加载常数Diet_compose,期望LoadError从(irb):8中定义

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-08 18:37:33

你需要在这里纠正多个问题。我已经把这些评论加进了里面。

Diet模型(diet.rb)中

代码语言:javascript
复制
class Diet < ApplicationRecord
  attr_accessible :diet_composes # make the attributes accessible for mass assignment.
end

在管制员中:

代码语言:javascript
复制
class DietsController < ApplicationController
    def new
        @diet = Diet.new
        @diet.diet_composes.build
    end

    def create
        @diet = Diet.new(diet_params)
        if @diet.save
            flash[:success] = "success"
        end
    end
    def diet_params
       # add attributes of nested association to whitelist
      params.require(:diet).permit(:name, :coach_id, :diet_composes_attributes => [:hour, :day, :food_id, :diet_id])
    end

end

您并不真的需要DietComposesController的操作才能使嵌套的Diet属性工作。

代码语言:javascript
复制
class DietComposesController < ApplicationController
    def new
        @diet_compose = DietCompose.new # Model name is always CamelCase. DietCompose rather than Diet_compose
    end

    def create
        @diet_compose = DietCompose.new(diet_compose_params) # here as well
        if @diet_compose.save
            flash[:success] = "success"
        end
    end

    def diet_compose_params
      params.require(:diet_compose).permit(:quantity, :hour, :day, :food_id, :diet_id, )
    end
end

您的命令应该是DietCompose.all。甚至看看diet_model.rb的定义。它将名称声明为DietModel

你的看法似乎很好。我没有和nested_form_fields宝石公司合作过,所以不能百分之百肯定。调试的简单规则,请参阅rails服务器的日志并推断:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46634220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档