Можно ли вставить данные в две разные таблицы внутри одного контроллера - PullRequest
0 голосов
/ 25 мая 2019

У меня есть эти таблицы, имена которых

Таблица пользователей

и

ИзображенияТаблица

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

Теперь внутри формы (форма регистрации), если пользователь решит загрузить изображение, я хочу, чтобы изображениесохраните его в таблице изображений, оставаясь в

Users_controller методе создания

Это то, что я сделал до сих пор (new.html.erb)

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <%= form_for(@user, url: signup_path) do |f| %>
          <%= render'shared/error_messages', object: f.object %>
          <%= f.label :name %>
          <%= f.text_field :name, class: 'form-control' %>

          <%= f.label :email %>
          <%= f.email_field :email, class: 'form-control' %>

          <%= f.label :username %>
          <%= f.text_field :username, class: 'form-control' %>

          <%= f.label :password %>
          <%= f.password_field :password, class: 'form-control' %>

          <%= f.label :password_confirmation, "Confirmation" %>
          <%= f.password_field :password_confirmation, class: 'form-control' %>

          <span class="picture">
            <%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png' %>
          </span>
          <%= f.submit "Create an account", class: "btn btn-primary" %>
        <% end %>
    </div>
</div>

и внутри контроллера пользователя, у меня это в методе создания

1. def create
2.  @user = User.new(user_params) # Not the final implementation!
3.
4.  if @user.save
5.      # Save to the picture name to the picture table
6.               if params[:picture].present?
7.                 # How do I save the picture to the picture table from users controller
8.            @user.send_activation_email
9.        flash[:info] = "Please check your email to activate your account."
10.       redirect_to root_url
11. else
12.     #@states = State.all
13.         render 'new'
14. end
15.  end

Если вы посмотрите на строки 6 и 7, у меня есть эти

if params[:picture].present?
  # How do I save the picture to the picture table from users controller

Вот в чем проблема сейчас, как мне вставить имя картинки в базу данных внутри user_controller

Ответы [ 2 ]

1 голос
/ 29 мая 2019
# new action
def new 
  @user = User.new
  @user.pictures.build
end

# create action
def create
  @user = User.new(user_params)
  @user.save
end

private
def user_params
  params.require(:user).permit(:name, pictures_attributes: [:id]) 
# in addition to the id you need to specify the other required fields.
end
# User model
class User
  has_many :pictures
  accepts_nested_attributes_for :pictures, allow_destroy: true
end
# form view

<%= form_for @user do |f| %>
  pictures:
    <%= f.fields_for :pictures do |picture_form| %>
    # your code

Надеюсь, это поможет вам понять

0 голосов
/ 25 мая 2019

Я думаю, что вы ищете вложенные формы. Вложенные формы также принимают параметры дочернего класса, и в представлении вы можете добавить столько изображений, сколько захотите, и они будут сохранены в соответствующей таблице. Выезд - https://github.com/ryanb/nested_form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...