Моя форма (form_for) сохраняется ТОЛЬКО под моим current_user в первый раз. Остальные не привязаны к current_user, но они сохраняются - PullRequest
0 голосов
/ 05 мая 2018

Я создаю веб-приложение для пожертвований, и меня смущает вопрос, почему форма сохраняется только для моего current_user при первом пожертвовании. Если я иду к тому же получателю и добавляю целое число к любой данной категории (создаю новое пожертвование), оно не будет сохранено в current_user, но будет сохранено в БД. Вот соответствующий код:

class CategoriesController < ApplicationController

def new
    @category = current_user.categories.new
end 


def create
    @category = current_user.categories.new(category_params)
    if @category.save
        redirect_to donor_interface_path
    else
        render 'categories/_form', alert: "Your donation was not saved."
    end
end

def edit
    @category = Category.find_by(params[:donor_id])
end

def update
    @category = Category.find_by(params[:donor_id])
    if @category.update(category_params)
        redirect_to donor_interface_path
    else
        render :edit
    end
end 

form_for

<%= form_for(@category) do |f| %>

<div class="form-group">
<%= hidden_field_tag :category_id, @category_id, class: "form-control" %> 
</div>

<div class="form-group">
<%= f.label :toilet_paper %><br>
<%= f.text_field :toilet_paper, class: "form-control" %></div>

<div class="form-group">
<%= f.label :dental_hygiene %><br>
<%= f.text_field :dental_hygiene, class: "form-control" %></div>

На обеих страницах редактирования / новых

<%= render "categories/form", category: @category %>

ApplicationController, показывающий код current_user

def current_user
  @current_user ||= Donor.find(session[:user_id]) if session[:user_id]
end

AR

class Category < ApplicationRecord
    has_many :recipients
    has_many :donors, through: :recipients

class Donor < ApplicationRecord
    has_many :recipients
    has_many :categories, through: :recipients**strong text**

class Recipient < ApplicationRecord
    belongs_to :donor
    belongs_to :category

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вам необходимо найти или создать связь между вашим Donor (current_user) и вашим новым / обновлением Category через таблицу получателей.

Вы можете сделать что-то вроде:

 def create
  @category = current_user.categories.new(category_params)
  if @category.save
    @category.recipients.find_or_create_by(donor_id: current_user.id, category_id: @category.id)
    redirect_to donor_interface_path
  else
    render 'categories/_form', alert: "Your donation was not saved."
  end
end
0 голосов
/ 05 мая 2018

В действии создания попробуйте метод build

   def create 

      @category = Category.new(category_params)
      @category = current_user.categories.build(category_params)
         if @category.save
           redirect_to donor_interface_path
         else
           render 'categories/_form', alert: "Your donation was not saved."
         end
   end
...