首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: fields_for in fields_for不保存

Rails: fields_for in fields_for不保存
EN

Stack Overflow用户
提问于 2017-10-29 13:34:10
回答 1查看 114关注 0票数 0

我有一个信件形式,保存一些数据与消息和按钮相关联。我在消息fields_for中使用Message fields_for和Button fields_for。输入将显示,但当我提交时,按钮数据不会被保存。

我在rails控制台上看到了这个:

不允许参数:按钮

我的表格:

代码语言:javascript
复制
<%= f.fields_for :messages do |messages_fields| %>
            <div id="text-messenger">
              <div id="DIV_1">
                <%= messages_fields.text_area :content, :required => 'required', class: "autoExpand", id: "intro-text-input", :maxlength => 640, placeholder: "Enter your text...", data: { 'rows' => '3', 'data-min-rows' => '3' } %>
              </div>
              <div id="add-message-button" class="add-button">+ Add Button</div>
              <%= messages_fields.fields_for :buttons do |button_message_fields| %>
                <div class="add-button-modal">
                  <h4>Enter the URL and the text to display on your button</h4>
                  <label>Button Text</label>
                  <%= button_message_fields.text_field :button_text, :maxlength => 20, placeholder: "Enter the text to display on the button..." %>
                  <br><br>
                  <label>Button URL</label>
                  <%= button_message_fields.text_field :button_url, placeholder: "Paste URL..." %>

                  <button type="button" id="validate_new_message_button">Add Button</button>
                  <p class="remove-link" id="delete_new_button">Remove Button</p>
                </div>
              <% end %>
            </div>
          <% end %>

我在字母控制器中允许的参数:

代码语言:javascript
复制
def letter_params
      params.require(:letter).permit(:campaign_name, :core_bot_id, :nb_recipients, :scheduled_at,
        filters_attributes: [:id, :gender, :creation_date_start, :creation_date_finish, :first_name, :last_name, :segment => [], :timezone => [], :locale => []],
        messages_attributes: [Message.attribute_names.map(&:to_sym).push(:_destroy), buttons_attributes: [Button.attribute_names.map(&:to_sym).push(:_destroy)]],
        cards_attributes: Card.attribute_names.map(&:to_sym).push(:_destroy))
    end

字母模型:

代码语言:javascript
复制
class Letter < ApplicationRecord
  validates :campaign_name, :presence => true

  belongs_to :core_bot
  has_many :messages, dependent: :destroy
  has_many :cards, dependent: :destroy
  has_many :filters, dependent: :destroy
  has_many :analytic_deliveries, dependent: :destroy
  has_many :analytic_reads, dependent: :destroy
  has_many :analytic_sends, dependent: :destroy


  accepts_nested_attributes_for :filters
  accepts_nested_attributes_for :messages
  accepts_nested_attributes_for :cards
end

消息模型:

代码语言:javascript
复制
class Message < ApplicationRecord
  belongs_to :letter, optional: true
  has_one :button, dependent: :destroy

  accepts_nested_attributes_for :button
end

按钮模型:

代码语言:javascript
复制
class Button < ApplicationRecord
  belongs_to :message, optional: true
  belongs_to :card, optional: true
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-29 14:31:46

在信使模型中,您设置了has_one button关系(而不是复数),这意味着在params中您应该使用button_attributes而不是buttons_attributes.another建议,不要将所有属性都放在params中,只有那些您希望在表单中允许的属性,因为有时,某些属性是在服务器端计算的,您不需要客户机来填充它们。我希望这将对您有所帮助。

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

https://stackoverflow.com/questions/47000783

复制
相关文章

相似问题

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