Имеется вот такая модель сообщений:
class Message < ActiveRecord::Base
belongs_to :user
validates :user_id, presence: true
validates :body, presence: true
validates :user_name, presence: true, unless: 'user.present?'
def user_name
if user.present?
user.name
else
super
end
end
end
Вот такой контроллер:
class MessagesController < ApplicationController
def create
@message = Message.new(message_params)
if @message.save
redirect_to root_path, alert: 'Сообщение сохранено :)'
else
redirect_to root_path, alert: 'Сообщение не сохранено :('
end
# @message.author_id = current_user.id if current_user.present?
end
def show
@user = current_user
@messages = Message.all.order(created_at: :desc)
@new_message = @user.messages.build if current_user.present?
end
private
def message_params
params.require(:message).permit(:user_id, :body, :created_at)
end
end
Паршел формы для `message`
<%= form_for @new_message do |f| %>
<div class="form-field">
<%= f.hidden_field :user_id %>
<%= f.label :user, 'Сообщение', class: 'form-label' %>
<%= f.text_area :body, class: 'form-textarea' %>
</div>
<div class="form-action buffer-both">
<%= f.submit 'Отправить', class: 'button button-dark button-small' %>
</div>
<% end %>
Паршел вывода содержимого сообщения:
<% message ||= nil %>
<div class="question">
<div class="question-content">
<div class="question-text text-lead">
<%= message.body %>
</div>
<div class="question">
<div class="question-content">
<div class="question-text text-lead">
<%= l(message.created_at, format: :short) %>
</div>
<div class="question-text_author">
<% author = User.find(message.user_id) if message.user_id.present? %>
<p>Автор: <%= author.name %></p>
</div>
</div>
</div>
</div>
</div>
И вьюха `show`
<%= render 'messages/form' if @user.present? %>
<% @messages.each do |message| %>
<%= render partial: 'messages/message', object: message %>
<% end %>