Error with JS.ERB file - ruby-on-rails

I'm new into Rails world, and I'm trying to learn.
I'm following these tutorial: http://www.noupe.com/development/create-a-simple-twitter-app.html and trying to create an simple twitter application.
All code can be found in https://github.com/ricardovsilva/twitter-rubyOnRails .
I'm trying to add some ajax and javascript functionallity to my app and I'm having a lot of issues (and some of they I'm able to deal with google searchs) because tutorial is in rails 2 and I'm using rails 4.
The line of tutorial I'm stucked is:
Finally, we need to create the rjs template. To do this, create a file called “create.js.rjs” in the views/posts folder and add the following code.
page.insert_html :top, :posts, :partial => #post
page[#post].visual_effect :highlight
The problem is, when my browser try to render the page that uses this JS, I get the following error : "Uncaught SyntaxError: Unexpected token"
By the way, I'm using google chrome. To simulate the error just clone the repo, access this and run rails server. Open browser and go to http://localhost:3000/posts . Page will render, but with one error (posts will not be loaded, only one textbox and one button).
I really don't know what to do to make the browser understand these rails commands.
Any help will be appreciated.
EDIT: This is all that appears on my terminal
=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run rails server -h for more startup options
=> Ctrl-C to shutdown server
[2015-02-28 15:01:33] INFO WEBrick 1.3.1
[2015-02-28 15:01:33] INFO ruby 2.1.5 (2014-11-13) [x64-mingw32]
[2015-02-28 15:01:33] INFO WEBrick::HTTPServer#start: pid=5872 port=3000
Started GET "/posts" for ::1 at 2015-02-28 15:01:39 -0300
ActiveRecord::SchemaMigration Load (1.0ms) SELECT schema_migrations.* FROM
schema_migrations
Processing by PostsController#index as HTML
Rendered posts/_message_form.html.erb (2.0ms)
Post Load (1.0ms) SELECT posts.* FROM posts ORDER BY posts.created_at
ASC
Rendered posts/_post.html.erb (13.0ms)
Rendered posts/index.html.erb within layouts/posts (52.0ms)
Completed 200 OK in 120ms (Views: 78.0ms | ActiveRecord: 16.0ms)
Started GET "/assets/create-3acb657a1c6a2ce4ccc5172e5bd59c6e.js?body=1" for ::1
at 2015-02-28 15:01:41 -0300
The file where error happens is the create.js.erb, that is saved into folder app/assets/javascript.
This is the content of file:
page.insert_html :top, :posts, :partial => #posts
page[#post].visual_effect : highlight
[Edit 2 - After #rubykid suggestion]
I'm calling these javascript (or trying) from the posts.html.erb, but now I'm having error on console.
<!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<%=javascript_include_tag :all%>
</head>
<body>
<div id="content">
<%= yield %>
</div>
</body>
</html>
It's appear like he's trying to get the "all.js" file, and he will not, because it's don't exists. (on terminal I get this line Started GET "/javascripts/all.js" for ::1 at 2015-02-28 15:44:04 -0300)
What is the correct syntax in ruby 4?

Related

ember/rails app loading not loading properly (takes too long) in development

i have a new ember-cli app with rails backend. it is taking about 30+ seconds to load in development... which is obviously way too long.
i am using the ember-cli-rails gem https://github.com/rwz/ember-cli-rails
i'm using the rails server (i've tried webrick and thin). i'm not using ember server, not running them separately.
i am not using the rails asset pipeline. i have deleted it.
here is my rails config/routes
Rails.application.routes.draw do
resources :rewrites, contraints: { format: :json }
resources :users, contraints: { format: :json }
resources :movies, contraints: { format: :json }
root 'application#index'
namespace :api do
get :csrf, to: 'csrf#index'
end
get "/*path" => "application#index", contraints: { format: :html }
here is my application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Better Films</title>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
here is my application/index.html.erb, frontend is the name of my ember app
<%= include_ember_script_tags :frontend %>
<%= include_ember_stylesheet_tags :frontend %>
when i go to localhost, my rails server log shows this
Rendered application/index.html.erb within layouts/application (173.6ms)
Completed 200 OK in 203ms (Views: 202.6ms | ActiveRecord: 0.0ms)
Started GET "/assets/frontend/frontend.css?body=1" for 127.0.0.1 at 2015-01-15 23:13:28 -0600
Started GET "/assets/frontend/vendor.css?body=1" for 127.0.0.1 at 2015-01-15 23:13:39 -0600
Started GET "/assets/frontend/frontend.js?body=1" for 127.0.0.1 at 2015-01-15 23:13:49 -0600
Started GET "/assets/frontend/vendor.js?body=1" for 127.0.0.1 at 2015-01-15 23:14:00 -0600
web inspector network tab shows
I'm not sure if this is related, but I had the same issue when I set the ember app's path in config/initializers/ember.rb to Rails.root.join('frontend').to_s. When I removed the path option, everything worked fine.

Rails jQuery adapter rendering thrice

I'm following the Beginning Rails 3, Updated book from Apress 2010. The problem I'm having is with loading a Template dynamically with Ajax using the jQuery adapter. Everything works but it appears to be rendering three times on the page.
Here is how I dynamically load it when the user clicks the "new comment" link.
views/articles/show.html.erb
<%= link_to "new comment",
new_article_comment_path(#article, :format => :js),
:remote => true,
:id => 'new_comment_link' %>
Then I render it as such.
views/comments/new.js.erb
$("<%= escape_javascript render :file => 'comments/new'," +
" :formats => [:html], :handlers => [:erb] %>")
.insertAfter('#comments');
Then I see this in the log.
Started GET "/articles/1/comments/new.js" for 127.0.0.1 at 2013-01-18 14:51:05 -0600
Processing by CommentsController#new as JS
Parameters: {"article_id"=>"1"}
Article Load (0.2ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? LIMIT 1 [["id", "1"]]
Rendered comments/new.html.erb (53.8ms)
Rendered comments/new.js.erb (54.6ms)
Completed 200 OK in 57ms (Views: 55.9ms | ActiveRecord: 0.2ms)
Notice it renders my erb and the js file? Somehow that ends up with showing up three times on my page.
Any clues on how to fix this? I'm using Rails 3.2.9, rails.js (latest), and jquery-1.9.0.
Thanks!
Solved it!
Turns out I was adding rails.js and jquery.js TWICE!
Here is the skinny: assets/javascripts/application.js is crucial for including javascript files into your app. Basically whatever gets defined there gets pushed out to the page. You simply need to make sure that it gets defined at least once in the app as such.
views/layouts/application.html.erb
<%= javascript_include_tag "application" %>
And that's it! The Ajax jQuery adapter should just work. Becareful not to add any additional files to the javascript folder as those will get pushed out as well and that's exactly what you don't want. Basically I was defining the adapter both through application.html.erb and manually by downloading both files. Hopefully this will help a lost poor soul somewhere along the way.
Happy Hacking.

Why is the wrong action processing my .ajax request.

This is an issue I have been working around for some time now thinking I would eventually stumble on an explaination. I have not and it's now becoming a little more problematic for me.
I used rails-generate-scaffold to create a simple (users and posts) application. This was done after installing jquery and jquery-ui. I added actions "login" and "auth" to the users controller. Login.html.erb contains some javascript that sends .ajax request to the users#auth action passing the login information (email and password) as parameters.
The the template auth.js.erb exists. The "auth" action responds to format.js. The request looks normal, but rails processes the request with the "show" action rather than the "auth" action.
In other words, a request to userscontrollers#auth (via .ajax) is being processed by userscontroller#show (as JS).
The problem goes away if I remove the "resources :users" route that scaffold added (the correct action is then called). But without this route other useful scaffold stuff becomes unuseable (like users#new).
From Gemfile: gem 'jquery-rails', '>=0.2.6'
Installed jQuery with: rails generate jquery:install --ui
From ../layouts/application.html.erb
<head>
<title>Tab1</title>
<%= stylesheet_link_tag :all %>
<%= stylesheet_link_tag 'jquery-ui-1.8.16.custom.css' %>
<%= javascript_include_tag :defaults %>
<%= javascript_include_tag 'jquery.min.js' %>
<%= javascript_include_tag 'jquery.min.js', 'jquery-ui.min.js' %>
<%= csrf_meta_tag %>
</head>
Here is ./log/development.log to shows the request and the response.
Started GET "/users/auth/?email=steve&password=[FILTERED]&_=1326063255777" for 24.11.242.181 at 2012-01-08 17:53:45 -0500
Processing by UsersController#show as JS
Parameters: {"email"=>"steve", "password"=>"[FILTERED]", "_"=>"1326063255777", "id"=>"auth"}
^[[1m^[[36mUser Load (0.2ms)^[[0m ^[[1mSELECT `users`.* FROM `users` WHERE `users`.`id` = 0 LIMIT 1^[[0m
Completed 404 Not Found in 6ms
ActiveRecord::RecordNotFound (Couldn't find User with ID=auth):
app/controllers/users_controller.rb:43:in `show'
Suggests that the request --> GET "/users/auth/?email ... is being processed by UsersController#show as JS
Thanks

My route returns a blank view (no html when I do view source)

I am brand new to Ruby on Rails and I have been trying to get a simple default route set up and working. When I try to run my application I get a blank result (if I do a view source, there is nothing there).
Here are the relevant files (not sure if I am missing something that would be useful).
app/config/routes.rb
Blog::Application.routes.draw do
root :to => "home#index"
end
app/views/home/index.html.erb
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
end
end
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Benji</title>
<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
</head>
<body>
<%= yield %>
</body>
</html>
When I try to run my application, I go to http://localhost:3000 and nothing shows up. If I do a view source, it is empty.
If do rake routes this is the result:
JESSE-GAVINs-MacBook-Pro-17:benji jesse$ rake routes
(in /Users/jesse/Dev/benji)
root /(.:format) {:action=>"index", :controller=>"home"}
JESSE-GAVINs-MacBook-Pro-17:benji jesse$
In my development.log file I see this:
Started GET "/" for 127.0.0.1 at Tue Sep 07 10:44:10 -0500 2010
Processing by HomeController#index as HTML
Rendered home/index.html.erb within layouts/application (2.8ms)
Completed 200 OK in 15ms (Views: 14.7ms | ActiveRecord: 0.0ms)
What could be the issue? How do I go about solving this?
Solved (sort of...)
It works just fine when I started the rails server on a different port.
It was my understanding that I didn't need to restart the server in order for it to detect changes in the code.
Sorry about the waste of time, I just didn't know which tree I needed to bark up. I learned some things along the way.
As you're playing with Routes, you absolutely need to restart the server. I don't know if this is part of the problem, but most (all?) things under config/ need the server to be restarted to take effect, particularly routes and environment

Why is my Rails web app calling the wrong action?

I'm diving into Ruby on Rails and I'm experiencing a weird bug, using Rails 3.0.1 and Ruby 1.8.7. Using the generated scaffold code, my "Show" action is getting called when I'm expecting my "Destroy" action to get called. Here's the code...
routes.rb
webappdotcom::Application.routes.draw do
resources :projects
root :to => "home#index"
end
index.html.erb
<td><%= link_to 'Destroy', project, :confirm => 'Are you sure?', :method => :delete %></td>
actual HTML code that is rendered in browser
<td>Destroy</td>
server output when I click on the "Destroy" link
Started GET "/projects/12" for 127.0.0.1 at Wed Oct 20 23:39:37 -0500 2010
Processing by ProjectsController#show as HTML
Parameters: {"id"=>"12"}
Project Load (0.1ms) SELECT "projects".* FROM "projects" WHERE ("projects"."id" = 12) LIMIT 1
Rendered projects/show.html.erb within layouts/application (9.0ms)
Completed 200 OK in 77ms (Views: 13.3ms | ActiveRecord: 0.1ms)
You can see the "ProjectsController#show" action is being called, but I want the "Destroy" action to be called. Also, I noticed the browser isn't displaying the confirmation message "Are you sure?" either. Any ideas what could be causing this or what I'm missing?
Thanks so much!
This is because Rails 3 changed the way it uses javascript in forms. It used to add an onclick method to the link, but that goes against unobtrusive javascript. Now it just sets some tag attributes, and hooks into it with javascript in another file.
That page's layout (which is probably application.html.erb unless you've changed it) needs to have this line in the head section:
<%= javascript_include_tag :defaults %>
If this line is missing from your layout, that's the problem. Another possible cause could be if you've added the jQuery library to your app without adding the rails-specific jQuery library. Let me know how this works.
This may help you link_to with :method=>:delete not working ( Rails 3 ). Although in that article the edit is getting called instead. But the solution should work for show as well.

Resources