Rails Deep Nested Атрибуты для экземпляра Vue с JSON - PullRequest
0 голосов
/ 07 июня 2018

У меня есть приложение Rails с вложенными атрибутами формы, и я использую Vue.js.Мой первый уровень вложенности работает нормально для создания и редактирования, но для более глубоких вложенных атрибутов, как я могу исправить проблему Rails, нуждающегося в "_attributes", добавленных к связанным атрибутам для обработки обновления?

Как я могу получить доступболее глубокие вложенные атрибуты (в моем случае, «imum_premia ») и передать их экземпляру Vue с суффиксом« _attributes », чтобы отправка прошла?

//_form.html.erb

<%= content_tag :div,
data: {
  id: product.id,
  product: product.to_json(except: [:id, :created_at, :updated_at]),
  coverages_attributes: product.coverages.to_json(:except => 
  [:product_id, :created_at, :updated_at], :include => [:minimum_premia 
  => {:except => [:coverage_id, :created_at, :updated_at]}])
} do %>

...

<div v-for="(minimum_premium, index) in coverage.minimum_premia_attributes">
  <label>Amount</label>
    <input type="number" v-model="minimum_premium.amount">
</div>


//vue.js

var id = element.dataset.id
var product = JSON.parse(element.dataset.product)
    var coverages_attributes = JSON.parse(element.dataset.coveragesAttributes)
    coverages_attributes.forEach(function(coverage) {coverage._destroy = null})
    product.coverages_attributes = coverages_attributes

var app = new Vue({
  el: element,
  data: function() {
      return { id: id, product: product }
  },
  methods: {
    addCoverage: function() {
      this.product.coverages_attributes.push({
        id: null,
        name: "", 
        _destroy: null,
        minimum_premia_attributes: [{
          id: null,
          amount: null
        }]
      })
    } 

1 Ответ

0 голосов
/ 01 ноября 2018

Это было решено с помощью Jbuilder для генерации объекта JSON с использованием необходимых добавленных имен.

Например:

json.product do
  json.coverages_attributes product.coverages do |coverage|
    json.minimum_premium_rules_attributes coverage.minimum_premium_rules do |minimum_premium_rule|
      json.(minimum_premium_rule, :minimum_premium)
    end
  end
end

coverage.minimum_premium_rules, извлеченные из базы данных, были переданы в vue с помощьюправильное именование вложенных атрибутов - minimum_premium_rules_attributes - то, что Rails должно обновить запись.

...