Получение телефонного номера пользователя и отправка сообщения в ruby ​​on rails - PullRequest
0 голосов
/ 01 октября 2018

Я работаю над приложением обмена сообщениями в 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

session_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>

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

image of new message

1 Ответ

0 голосов
/ 01 октября 2018

Не очень понятно, почему вы используете локальную переменную 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...