Reputation: 113
Messing around with Ruby on Rails doing some hands on learning. I have reached a point where I would like for the form to submit and the controller to respond with JS. instead it prints the JS on the screen...
Messages Controller:
class MessagesController < ApplicationController
def index
@messages = Message.all
@message = Message.new
end
def new
@message = Message.new
end
def create
@message = Message.new(message_params)
if @message.save
@messages = Message.all
@message = Message.new
respond_to do |format|
format.js {}
end a
else
render 'new'
end
end
private
def message_params
params.require(:message).permit(:content)
end
end
Messages Page (HTML):
<div class="header">
<%= stylesheet_link_tag "chat.css" %>
<%= javascript_include_tag "jQuery.js" %>
<%= javascript_include_tag "chat.js" %>
<div class="container">
<h1>Messenger</h1>
</div>
</div>
<div class="messages">
<div id="messages_scroll" class="container">
<% @messages.each do |message| %>
<div class="message">
<p class="content"><%= message.content %></p>
<h6 class="time"><%= message.created_at %></h6>
</div>
<% end %>
</div>
<br>
<%= form_for @message, :remote => true do |f| %>
<div class="field">
<%= f.label :message %><br>
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Create" %>
</div>
<% end %>
</div>
Create.js.erb:
$('#messages_scroll').html('\
<% @messages.each do |message| %> \
<div class="message"> \
<p class="content"><%= message.content %></p> \
<h6 class="time"><%= message.created_at %></h6> \
</div> \
<% end %>');
What happens when I submit a new message:
Upvotes: 0
Views: 360
Reputation: 8900
Try this:
create.js.erb
$('#messages_scroll').html("<%= j(render(@messages)) %>");
_message.html.erb (in the same directory)
<div class="message">
<p class="content"><%= message.content %></p>
<h6 class="time"><%= message.created_at %></h6>
</div>
Upvotes: 2