Недопустимый параметр с has_many_and_belongs_to: param, через: param - PullRequest
0 голосов
/ 11 января 2019

У меня проблемы с вводом данных в мою новую модель.

Я создал новую модель, чтобы я мог назначать пользователей филиалам.

У меня есть модель Users, Affiliates и UserAffiliates.

UserAffiliates

  belongs_to :users
  belongs_to :affiliates

Пользователь

  has_and_belongs_to_many :user_affiliate
  has_and_belongs_to_many :affiliate, through: :user_affiliate, optional: true

Партнёрские

  has_many :user_affiliates
  has_many :users, through: :user_affiliates

Как это работает, у партнера может быть много пользователей, но у пользователя всегда будет только один партнер. Затем у меня есть столбец комиссионных в таблице UserAffiliates, чтобы установить комиссию для каждого пользователя в отдельности.

Я создал эту форму, и она, кажется, не работает (которая основана на <% @users.each do |user| %>, который проходит через каждого пользователя в таблице:

<%= form_for user, remote: true do |f| %>
  <% f.fields_for :user_affiliates,  remote: true do |f| %>
    <%= f.text_field :affiliate_id, class: "form-control"  %>
  <%= f.submit "Add Affiliate", data: {confirm: "Are you sure?"}, class: "btn btn-light" %>
  <% end %>
<% end %>

Я получаю эту ошибку:

Parameters: {"utf8"=>"✓", "user"=>{"user_affiliates"=>{"affiliate_id"=>"1"}}, "commit"=>"Add Affiliate", "id"=>"2"}
  User Load (0.7ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/users_controller.rb:58
Completed 500 Internal Server Error in 62ms (ActiveRecord: 6.4ms)



ArgumentError (wrong number of arguments (given 0, expected 1..2)):

app/controllers/users_controller.rb:88:in `[]'
app/controllers/users_controller.rb:88:in `user_params'
app/controllers/users_controller.rb:61:in `block in update'
app/controllers/users_controller.rb:60:in `update'

Параметры контроллера пользователя :

 def user_params
    params.require(:user).permit(:name, :approved, :seller, :buyer, :admin, :stripe_account, :email, :password, :password_confirmation, :role, :affiliate_id, :affiliate_ids [], :user_affiliates, :commission)
 end

Моя форма неверна?

Я хочу иметь возможность перечислять пользователей в таблице как user.admin, иметь текстовое поле и вводить affiliate_id, а затем вводить user_id и affiliate_id в таблицу UserAffiliate. Я также хочу добавить комиссионные ставки, которые могут изменить и user.admin, и Affiliate.

Как я могу сделать это правильно?

Обновление:

Я исправил свои параметры, но все еще есть ошибки:

Титулы:

def user_params
       params.require(:user).permit(:name, :approved, :seller, :buyer, :admin, :stripe_account, :email, :password, :password_confirmation, :role, :affiliate_id, :user_affiliates, :affiliate, :commission, affiliate_ids: [])
end

Ошибка:

Started PATCH "/users/2" for 127.0.0.1 at 2019-01-10 21:20:53 -0500
Processing by UsersController#update as JS
  Parameters: {"utf8"=>"✓", "user"=>{"user_affiliates"=>{"affiliate_id"=>"1"}}, "commit"=>"Add Affiliate", "id"=>"2"}
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/users_controller.rb:58
Unpermitted parameter: :user_affiliates
   (0.5ms)  BEGIN
  ↳ app/controllers/users_controller.rb:61
   (0.1ms)  ROLLBACK
  ↳ app/controllers/users_controller.rb:61
Completed 406 Not Acceptable in 21ms (ActiveRecord: 5.3ms)



ActionController::UnknownFormat (ActionController::UnknownFormat):

app/controllers/users_controller.rb:60:in `update'

Я попытался изменить его на user_affiliate (non pluar) и множественное число во всех контроллерах, моделях и формах. Что мне нужно сделать для обновления на контроллере пользователей?

Обновление контроллера пользователя:

  def update
   @user = User.find(params[:id])
   # @affiliate = current_affiliate
   respond_to do |format|
     if @user.update(user_params) # <- you'll need to define these somewhere as well
       if @user.admin?
         format.html { redirect_to '/admin/users', notice: "yahoo" }
         format.json { render json: @user }
       # elsif @affiliate
       #     format.html { redirect_to '/a/clients', notice: "yahoo" }
       #     format.json { render json: @user }
       else
         format.html { render :edit }
         format.json { render json: { errors: @user.errors }, status: :unprocessable_entity }
       end
     end
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...