My created thing
object is not showing up in the view using jQuery/Ajax.
I want to append to the div labeled things here index.html.erb
<h1>Listing things</h1>
<%= link_to 'New Thing', new_thing_path, id: "new_thing_link", remote: true %><br>
<% @things.each do |thing| %>
<div class="things">
<%= thing.user_name %>
<%= thing.topic %>
<%= thing.truth %>
<%= link_to 'Show', thing %>
<%= link_to 'Edit', edit_thing_path(thing) %>
<%= link_to 'Destroy', thing, method: :delete, data: { confirm: 'Are you sure?' } %><br><br>
</div>
<% end %>
<br>
So in the controller I have the js formate respond to this custom template. The first 2 steps works as expected, and I get 200 OK from server output.
create.js.erb
$(".actions").remove(); // remove the form
$("#new_thing_link").show(); //show the new link again
$('.things').append('<%= j render @thing %>'); //insert the new task into the index template
_create.html.erb
<tr id="topics">
<td><%= thing.user_name %> |</td>
<td><%= thing.topic %> |</td>
<td><%= thing.truth %></td>
</tr>
things_controller.rb
def create
@thing = Thing.new(thing_params)
respond_to do |format|
if @thing.save
format.html { redirect_to things_url, notice: 'your posting was added.' }
format.js
else
format.html { render :new }
format.json { render json: @thing.errors, status: :unprocessable_entity }
end
end
end
But the new div only shows up when I refresh the page. It is there when I view the source without refreshing the page and the console isn't showing any errors.
Here is the server output so I know the record is being created,
Started POST "/things" for 127.0.0.1 at 2014-08-14 21:28:43 -0700
Processing by ThingsController#create as JS
Parameters: {"utf8"=>"✓", "thing"=>{"user_name"=>"reggie", "truth"=>"it was difficult", "topic"=>"a topic"}, "commit"=>"Create Thing"}
(0.1ms) begin transaction
SQL (0.5ms) INSERT INTO "things" ("created_at", "topic", "truth", "updated_at", "user_name") VALUES (?, ?, ?, ?, ?) [["created_at", "2014-08-15 04:28:43.501567"], ["topic", ""], ["truth", "asdf"], ["updated_at", "2014-08-15 04:28:43.501567"], ["user_name", "asdfasd"]]
(9.0ms) commit transaction
Rendered things/_thing.html.erb (0.1ms)
Rendered things/create.js.erb (2.2ms)
Completed 200 OK in 18ms (Views: 5.7ms | ActiveRecord: 9.6ms)
the view is just not updating as I expect. What am I doing wrong? Is this a turbolinks issue?
It looks like you're using it correctly. Try this small change, specifying your partial location (notice that your path to the partial may be wrong as I don't know how you're organizing things):
$('.things').append("<%= j render :partial => 'things/create', :locals => {:thing => @thing} %>");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.