Получение номера телефона пользователя и отправка сообщения в ruby ​​on rails

Я работаю над приложением для обмена сообщениями на Ruby, и в настоящее время я сталкиваюсь с блокировщиком, который не могу исправить. Я использовал для этого учебные пособия, и я думаю, что частично я не могу найти решение именно из-за этого. Мое приложение позволяет пользователям входить в систему и регистрироваться, а затем они могут добавлять, просматривать и редактировать контакты. Наконец, можно отправить сообщение разным получателям. Проблема в том, что я не могу получить получателей в контактах и ​​отправить им сообщение. Я могу выбрать только свое имя как пользователь (это не то, для чего он предназначен). Я прикрепил используемые здесь контроллеры:

contacts_controller

class ContactsController < ApplicationController
    def index
        @contacts = Contact.all
    end

    def new
        @contact = Contact.new
    end

    def create
        @contact = Contact.new(contact_params)
        if @contact.save
            flash[:success]= "new contact successfully added!"
            redirect_to contacts_path
        else
            render 'new'
        end
    end

    def edit
        @contact = Contact.find(params[:id])
    end

    def update
        @contact = Contact.find(params[:id])
         permitted_columns = params.require(:contact).permit(:name, :company, :email, :phone)
        @contact.update_attributes(permitted_columns)
        redirect_to contacts_path
    end

    def destroy
        @contact = Contact.find(params[:id])
        @contact.destroy
        redirect_to contacts_path
    end

    private

    def contact_params
        params.require(:contact).permit(:name, :company, :email, :phone)
    end
end

messages_controller

class MessagesController < ApplicationController

    def index
        @messages = Recipient.where(:user_id => current_user.id).order('created_at DESC')
    end

    def new
        @message = Message.new
        @recipients = Contact.all
    end

    def create
      @message = current_user.messages.build(message_params)

      if @message.save
        flash[:success]= "Message sent!"
        redirect_to contacts_path 
      else
        flash[:alert]= "sorry!message unsent"
        render :new
      end
    end

    private

    def message_params
        params.require(:message).permit(:body, :sender_id, user_tokens:[]) 
    end
end

users_controller

class UsersController < ApplicationController

    def index
    end

    def create
        user = User.new(user_params)
        if user.save
            session[:user_id] = user.id
            redirect_to '/contact'
        else
            flash[:register_errors] = user.errors.full_messages
            redirect_to '/'
        end
    end

    private

    def user_params
         params.require(:user).permit(:fname, :lname, :email, :password, :password_confirmation)
    end
end

sessions_controller

class SessionsController < ApplicationController

    def create
        user = User.find_by(email:login_params[:email])
        if user && user.authenticate(login_params[:password])
            session[:user_id] = user.id
            redirect_to '/contact'
        else
            flash[:login_errors] = ['invalid username or password']
            redirect_to '/'
        end
    end

    def destroy
        session[:user_id] = nil
        redirect_to '/', notice: 'Successfully logged out!'
    end

    private

    def login_params
        params.require(:login).permit(:email,:password)
    end
end

_Recipient.html.erb обрабатывается new.html.erb. Вот код:

    <div class = "container vertical-center">
 <div id  = "stream">
    <%= form_for :message, url:messages_path do |f| %>
    <%= f.text_area :body, id: "url", placeholder: "Message", class: "message_body" %>
    <div id = "stream-list" class = "follow-list">
        <ul>
            <% @recipients.each do |contact| %>
            <label for = "user<%=contact.id%>" >
                <li id = "stream_item">
                    <span class = "list-group-item"><%= contact.name %></span><%= check_box_tag "message[user_tokens][]",user.id, @message.users.include?(user), id: "user#{user.id}" %>
               </li>
            </label>
            <br>
            <% end %>
        </ul>
    </div>
    <div class = "stream-footer">
        <%= f.button :submit, class: "btn btn-success" %>
        <% end %>
    </div>

 </div> 
</div>

Вот ошибка, когда я пытаюсь написать сообщение

Получение номера телефона пользователя и отправка сообщения в ruby ​​on rails

Получаете ли вы сообщения об ошибках при вашем текущем подходе? Если да, добавьте их к вопросу.

John Baker 01.10.2018 14:53

да, позвольте мне добавить.

Raycee 01.10.2018 15:15
user не определен в _recipient.html.erb. Может стоит <%= check_box_tag "message[user_tokens][]",contact.id ...
Michael Malov 01.10.2018 15:41

вы можете добавить сюда модели? например, вы можете получить доступ к сообщениям, если модель сообщений принадлежит модели пользователя. Тогда с чем-то вроде current_user.messages она вернет то, что вам нужно, я думаю, вы используете для этого так много кода.

Marcos R. Guevara 01.10.2018 15:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
161
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не очень понятно, почему вы используете локальную переменную user в своем шаблоне представления. Думаю, это просто ошибка и вместо нее предполагается использовать переменную contact:

<span class = "list-group-item"><%= contact.name %></span><%= check_box_tag "message[user_tokens][]", contact.id, @message.users.include?(contact), id: "user#{contact.id}" %>

Также небольшая ошибка HTML: тег ul должен содержать теги li; другие теги не допускаются как прямые потомки. Так что я бы также переписал этот список как:

<ul>
  <% @recipients.each do |contact| %>
  <li id = "stream_item">
    <label for = "user<%=contact.id%>" >
      <span class = "list-group-item"><%= contact.name %></span><%= check_box_tag "message[user_tokens][]", contact.id, @message.users.include?(contact), id: "user#{contact.id}" %>
    </label>
  </li>
  <br>
  <% end %>
</ul>

Другие вопросы по теме