Невозможно передать user_id в качестве параметра после обнаружения пользователя по электронной почте - PullRequest
0 голосов
/ 12 июня 2018

Заранее извиняюсь, если название этого поста неясно, у меня возникли трудности с объяснением возникшей проблемы.У меня есть приложение, которое позволяет пользователю создавать цели.Я пытаюсь создать модель сотрудничества, чтобы пользователи могли делиться своими целями друг с другом.Для этого я создал модель Collaboration, которая принадлежит модели User and Goal и хранит goal_id и user_id для представления доступа пользователей к другим целям.

Я создал форму в Goal # show, которая позволяет пользователю вводить адрес электронной почты пользователя, с которым он хотел бы поделиться.Я воспользуюсь этим электронным письмом, возьму user_id из связанной записи и создаю запись в записи Collaboration.У меня возникают проблемы при переходе от получения электронной почты пользователя к получению идентификатора и передаче его в качестве параметра.Код размещен ниже.

CollaborationsController.rb

class CollaborationsController < ApplicationController
    def create
        @goal = Goal.find(params[:goal_id])
        @user = User.find_by(email: params[:email])
        #@user=User.find(params[:email])
      if @user
            @collaboration = @goal.collaborations.create(collaboration_params)
            if @collaboration.save
                flash[:notice] = "User successfully added to goal."
            else
                flash[:error] = "There was a problem adding user. Please try again."
            end
        else
            flash[:error] = "Sorry that wasn't a valid username. Please try again."
        end
        redirect_to goal_path(@goal)
    end

    def collaboration_params
      params.require(:collaboration).permit(:user_id, :goal_id)
  end

end

partnership / _form.html.erb

<%= form_with(model: [ @goal, @goal.collaborations.build ], local: true) do |form| %>
  <p>
  <%= form.label :email %>
  <%= form.text_field :email %>
  </p>
  <p>
  <%= form.submit %>
  <p>
<% end %>

Данные формы из инструментов разработчика:

utf8: ✓
authenticity_token: RXa9u10cLdw1FK29hOly33wWDN+dDd5NTtvZ/yYbKfMJ6RhHw+nV8/OgiFbQ+raRcNzbbWItCct7lv+A3CmINw==
collaboration[email]: [actualemailofuser]
commit: Create Collaboration

адрес электронной почты отправлен и обработан.Как мне получить от поиска записи пользователя с этим электронным письмом до получения user_id из этой записи и отправки его в качестве параметра?

1 Ответ

0 голосов
/ 13 июня 2018

Проблема возникла из-за того, что я не успешно передал параметр: email в метод создания контроллера.

Вот рабочий код:

laborations_controller.rb

class CollaborationsController < ApplicationController
    def create
        @goal = Goal.find(params[:goal_id])
        @user = User.find_by(email: params[:email])
      if @user
            @collaboration = Collaboration.new(goal_id: @goal.id, user_id: @user.id)
            if @collaboration.save
                flash[:notice] = "User successfully added to goal."
            else
                flash[:error] = "There was a problem adding user. Please try again."
            end
        else
            flash[:error] = "Sorry that wasn't a valid username. Please try again."
        end
        redirect_to goal_path(@goal)
    end

    def collaboration_params
      params.require(:collaboration).permit(:user_id, :goal_id, :email)
  end

end

laborations / _form.html.erb

<%= form_with(model: [ @goal, @goal.collaborations.build ], local: true) do |form| %>
<p>
  <%= text_field_tag :email, params[:email] %>
 </p>
  <p>
  <%= form.submit %>
  </p>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...