Я работаю над приложением обмена сообщениями в 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>
Вот ошибка, когда я пытаюсь написать сообщение