当前位置: 首页 > 知识库问答 >
问题:

嵌套形式未保存在轨道3.1中

从经略
2023-03-14

没有问题,我肯定,但是我似乎找不到我的错误。症状集使用正确的user_id保存,但是嵌套的症状消失了。注意,用户模型结构与Rails教程中的相同(除了它有_many :symptom_sets)

模型:

class SymptomSet < ActiveRecord::Base
  attr_accessible :symptoms, :symptoms_attributes
  belongs_to :user
  has_many :symptoms, :dependent => :destroy
  accepts_nested_attributes_for :symptoms,  allow_destroy: true
end

class Symptom < ActiveRecord::Base
  attr_accessible :name, :duration, :symptom_set_id
  belongs_to :symptom_set
end

控制器:

class SymptomSetsController < ApplicationController
    before_filter :signed_in_user, only: [:create, :new]

    def new
      @symptom_set = SymptomSet.new
      3.times do
        symptom = @symptom_set.symptoms.build
      end
    end

    def create
      @symptom_set = current_user.symptom_sets.build(params[:symptom_sets])
      if @symptom_set.save
        flash[:success] = "Symptoms submitted!"
        redirect_to root_url
      else
        render 'static_pages/home'
      end
    end

以及视图:

<%= simple_form_for @symptom_set, :html => { :class => 'form-inline' } do |f| %>

    <%= f.fields_for :symptoms do |builder| %>
   <%= render 'symptom_fields', f: builder %>
    <% end %>

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

还有部分:

       <%= f.input :name, 
                   :collection=> ["Cough", "Fever", "Headache", "Lethargy"], 
                    label: "Symptom", 
                    prompt: "Select a symptom",
                   :input_html => { :class => "span3" }%>  

       <%= f.input :duration, 
                   :collection => 1..14, 
                    label: "Duration",
                    prompt: "How many days?" %>

最后,rails服务器控制台输出以下内容:

参数:{“utf8”=

(0.1ms)开始SQL(0.4ms)插入“symptom_sets”(“created_at”、“updated_at“、“user_id”)值($1、$2、$3)返回“id”[[“createe_at”,2013年2月5日,星期二21:12:07 UTC 00:00],[“updatee_at“,星期二,2013年12月5日21:12:07UTC 00:00],[”user_id“,1]](1.1ms)提交

共有1个答案

闻人宝
2023-03-14

我会试着改变:

@symptom_set = current_user.symptom_sets.build(params[:symptom_sets])

收件人:

@symptom_set=current_user.symptom_sets.new(params[:symptom_sets])

我不知道build在那里是否有效。

还要检查终端日志上的参数是否被调用symptom_sets以及它是否正在发送嵌套表单属性的参数。

编辑:

我真的认为你的参数的名字会是symptom_set。检查一下。

 类似资料:
  • 我有GWT的Spring入学申请。在服务器端,我为所有实体提供了简单的JpaRepository接口,例如: 有一个MyEntity类与My其他Entity类有一对一的关系。当我调用我的实体服务持久化方法时 将只保存myEntity对象。MyEntity的所有子对象都被忽略。保存myEntity对象和myOtherEntity对象的唯一方法是调用 在上面的代码之前。那么有没有更优雅的方法来使用Jp

  •        点击轨迹记录面板的结束记录按钮:        在弹出来的名称输入框中,输入轨迹名称(默认名称为时间),点击确定,即可完成轨迹记录:        保存完成后,主界面中会展示此轨迹线,也可通过数据管理进行其他操作。

  • 我似乎无法将@current_用户存根,以便我的before_filter:login_required通过,并获得正确的模板,而不是重定向到登录屏幕。 这是我的控制器规格: 我相信这是用于存根的较新rspec语法。 下面是一些使用控制器的示例。存根方法,但这似乎不起作用。我只想存根@current_user变量,这样看起来就像用户登录了一样,这样我就可以用实际的控制器规范测试我的控制器了。现在,

  • 问题内容: 具有角形的这种普通(名称属性由服务器要求)形式,无法弄清楚如何使验证有效。我应该在ng-show =“ TODO”中添加什么 http://jsfiddle.net/Xk3VB/7/ ps:这只是一种形式,更复杂 谢谢 问题答案: AngularJS依靠输入名称来暴露验证错误。 不幸的是,到目前为止,不可能(不使用自定义指令)动态生成输入的名称。确实,检查输入文档,我们可以看到name

  • 在 Netty 4.1 中,是否可以创建子通道/管道或嵌套通道/管道? 例如,我有一个管道,其中安装了各种编解码器,用于协议/序列化。在管道结束时,我将一条消息传递给我的应用程序级逻辑。过度简化的示例: 然后,这个应用逻辑的句柄方法可以执行它想要的任何顺序逻辑。这清楚地分离了我的应用程序级别逻辑,但是,我想利用Netty的ChannelPipeline提供的“拦截过滤器模式的高级形式”。我想将管道

  • 我正在尝试处理一个对我来说相当复杂的表格... 我们有收藏,其中包含书籍(OneTo多国),文章(OneTo多国)及其作者(ManyTo多国)。 用户可以编辑一本书:他可以添加或删除一篇文章,还可以为每篇文章添加或删除一些作者。有嵌套表单:book 实体描述看起来很好,数据库是由控制台生成的,看起来是一致的。 如果我不必与使用图书版表单的作者打交道,这就很好了。如果作者存在,我有一个重复条目错误。