2

RoR初心者です。私の質問は、関連するアクティブ モデルの属性の更新に関するものです。

class User
  has_many :toys
end

class Toy
  belongs_to :user
end

そして、ユーザーの属性と、関連付けられた user_devices の特定の属性を更新できるユーザーのフォームを含むページがあります。

<%= f.text_field :age %> # from user
<%= f.text_field :email %> # from user
....
<%= f.check_box :is_new %> # from toy!!

フォームを投稿し、update_attributes() を使用してすべての属性を更新すると、「ActiveModel::MassAssignmentSecurity::Error」と表示されます

@user.update_attributes(params[:user]) # it gives ActiveModel::MassAssignmentSecurity::Error

もう 1 つの問題は、「is_new」属性が toy テーブルにあるため、その名前を付ける方法がわからないことです。:toys_is_new にする必要がありますか?

関連するおもちゃの属性も更新したいです。これで私を助けてもらえますか?

4

2 に答える 2

1

is_new?からなのでToy、次を使用する必要がありますaccepts_nested_attributes_for

#app/models/user.rb
class User < ActiveRecord::Base
  has_many :toys
  accepts_nested_attributes_for :toys
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
  def edit
    @user = User.find params[:id]
  end

  def update
    @user = User.find params[:id]
    @user.update user_params
  end

  private

  def user_params
    params.require(:user).permit(:age, :email, toys_attributes: [:is_new])
  end
end

これを で機能させるには、ヘルパーviewを使用する必要があります。fields_for

#app/views/users/edit.html.erb
<%= form_for @user do |f| %>
  <%= f.fields_for :toys, @user.toys do |t| %>
    <%= t.object.name %>
    <%= t.check_box :is_new %>
  <% end %>
  <%= f.submit %>
<% end %>
于 2016-02-06T10:53:54.967 に答える