f.ассоциация с current_user в simple_form - PullRequest
0 голосов
/ 02 февраля 2019

Я создаю веб-сайт, на котором пользователь может создать «проект», содержащий несколько «статей».

Я пытаюсь связать создание нового «проекта» с конкретным пользователем, который создаетЭто.Для этого я передаю как hidden value the current_user в simple_form.Однако я не в состоянии это сделать, на самом деле проект не сохраняет. Однако , если я изменю следующую строку:

<%= f.association :user, label: "Which user is creating it?",
:as => :hidden, :input_html => { :value => current_user }  %>

с помощью

        <%= f.association :user%>

Это позволяет мне выбирать среди всех пользователей и, если я выбираю одного,он создает «проект».

Поэтому , я думаю, моя проблема в том, как я прохожу current_user в simple_form.Я передаю это так :input_html => { :value => current_user }

_form_new.html.erb

  <%= current_user%> #IT DISPLAYS CORRETLY THE CURRENT USER

<div class="container">

  <div class="row ">
    <div class="col-sm-6 col-sm-offset-0">

<%= simple_form_for(@project) do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>

      <div class="form-inputs">
        <%= f.input :title, label: "Write the title of the project you are creating" %>
        <%= f.input :body, label: "Write a short summary of the project you are adding", as: :text, input_html: {rows: 15, cols: 10} %>
        <%= f.association :user, :as => :hidden, label: "Which user is creating it?", :input_html => { :value => current_user }  %>

      </div>

      <div class="form-actions">
        <%= f.button :submit %>
      </div>
      <% end %>
    </div>
  </div>
</div>

User.rb

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :projects
end

Project.rb

class Project < ApplicationRecord
  belongs_to :user
  has_many :papers
end

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Если вы передадите current_user.id через форму, даже в скрытом поле, любой пользователь может изменить ее и создать проект для кого-то другого.Не уверен, что хочешь.Правильный подход - вызвать current_user.projects.build в контроллере.

def create
  @project = current_user.projects.build(project_params)
  if @project.save
    redirect_to projects_path
  else
    render :new
end
0 голосов
/ 03 февраля 2019

Решено!

Мне нужно было пройти и id до current user.

Правильный путь:

<%= f.input :title, label: "Write the title of the project you are creating" %>
<%= f.input :body, label: "Write a short summary of the project you are adding", as: :text, input_html: {rows: 15, cols: 10} %>
<%= f.association :user, label: "Which user is creating it?",
:as => :hidden, :input_html => { :value => current_user.id }  %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...