Rails - trying to create simple ajax example - ajax

The code below is not working for some reason. As I click at "test" it redirects me to /home/test and shows nothing.
view/home/index.html.erb
<%= link_to "test", { :controller => "home", :action => "test" }, :remote => true %>
<div id='test_div'>
</div>
view/home/index.js.erb
$("#test_div").html("some text");
controller
class HomeController < ApplicationController
def test
"test123 test456"
respond_to() do |format|
format.js {render :layout => false}
end
end
end
What should I do to refresh div_test using ajax?

What does your routes file look like? Can you post it on here? Do a rake routes and post the output.
Here are some things that may help you:
Rails documentation for routing
Also, check out the Ajax on Rails Documentation and the section on link_to_remote. The link_to_remote function is not in Rails. What version of rails are you on? Bash: $ rails -v
Look at this answer on S.O. regarding AJAX on Rails calls.
Edit: Here is another answer regarding this that may help.
Another answer on SO for updating existing element
Edit: looking over this again, I dont think you need () after respond_to or the {...} in link_to. Look at the third link. I think you need to put the page in a partial and render it. Its not rendering right now since its render :layout => false

Related

How to render partial haml on controller in padrino?

I'm doing a ajax request. The backend might render a partial haml and return it. I'm getting this error
Padrino::Rendering::TemplateNotFound at /feedhtml
backend code
render :partial => 'feedhtml', :layout => false
Also I tried a tons of variation of this code.
can you check the right folder where you put feedhtml? now it searchs in views/ is that what you want?
check the subfolder.
render :partial => 'partial/feedhtml', :layout => false
if you files is in
views/partial/feedhtml

Accessing url parameters in Padrino\Sinatra

I am building a simple application with Padrino
I have set up a link to pass parameters as follows:
.new_update=button_to pat(:new_update), url(:updates, :new), :status_notice_id => #status_notice.id, :method => :get, :class => :button_to
Which is rendered as follows:
<form class="button_to" action="/admin/updates/new" status_notice_id="2" method="get">
My admin controller looks like:
get :new do
#status_notice_id = params[:status_notice_id]
#update = Update.new :status_notice_id => #status_notice_id
render 'updates/new'
end
However I am at a loss as how to successfully pull the parameter into my code. Any ideas? I'm new to both sinatra and padrino, so I'm guessing I haven't gotten a handle on routing correctly but I'm getting increasingly confused.
Use url(:updates, :new, :status_notice_id => #status_notice.id) to get /admin/updates/new?status_notice_id=2 URL.
In your code status_notice_id applies to button_to helper method and goes to html attributes.

Rendering JSON in Rails 3.0

I'm having trouble rendering JSON with Rails 3.0. Whenever I visit the URL, nothing appears to show up on the screen (I'm pretty sure the JSON should be displaying kind of like XML?) Sorry, I'm fairly new to Rails in general
Here is my code.
def rjson
#comments = Chat.all
respond_to do |format|
format.json { render :json => #comments }
end
end
I simplified it as much as possible. Based on some of the tutorials I have
My routing looks like this:
match '/chatbox/rjson', :to => 'chatbox#rjson'
I'm pretty sure my model is fine.
I don't know if I should even have a 'rjson' view like (rjson.json.erb?) but I'm pretty sure I can just render from the controller without a view right?
If you are sure rjson will only response with json format, you just need:
def rjson
#comments = Chat.all
render :json => #comments
end

Can't Get Rails 3.1 to respond with js file correctly

I'm trying to make a form in Rails that will respond with a js file. Right now, I have a file in app/assets/javascripts/login.js.coffee.erb that I'd like to be returned when the user submits the form via ajax (I've got users without javascript enabled working fine). Here's my template code for the form:
<%= form_tag("/trade/submit", :method => "post", :remote => true) do %>
# some stuff in here
<% end %>
In my trade controller, I have a method submit, which follows:
def submit
respond_to do |format|
format.html { render :layout => 'widget' + #widget_type.to_s, :template => 'login/index' }
format.js { render :action => 'login', :content_type => 'text/javascript' }
end
end
My respond with html works fine, but when calling the form via ajax, it returns this response:
Missing template trade/submit, application/submit with {:handlers=>[:erb, :builder, :coffee], :formats=>[:js, :html], :locale=>[:en, :en]}. Searched in:
* "~/app_dir/app/views"
Obviously, it shouldn't be looking in views, but rather in javascripts, right? I tried removing the render block after format.js (keeping it default so it will look for submit), and I get the same problem. Does this mean I have to save my js files in my views directory? Seems kinda messy, so I feel like surely I must just be doing something wrong. Any help is greatly appreciated!
It tries to find app/view/trade/submit.js.erb! Try to do a simple test.
touch app/view/trade/submit.js.erb
vim app/view/trade/submit.js.erb
alert('done!');
And run it again.

Ruby w/ Sinatra: Could I have an example of a jQuery AJAX request?

%a{:href => "/new_game?human_is_first=true", :remote => "true"}
%span Yes
Above is my link. Just wondering how to handle this. I need to be able to execute some javascript. Below is a .js.erb file from back when I using rails.
$('.welcome_container').fadeOut(500, function(){
$( '.shell' ).html( "<%= escape_javascript( render( :partial => "board/board" ) ) %>" );
$('.board_container').fadeIn(500);
});
So, my question is, Once /new_game is called in app.rb, I want to be able to send some javascript to the current page (without leaving the page, and have the partial rendered)
See my answer to your other recent question for a comprehensive setup for sending and receiving HTML partials in a production Sinatra app.
As Sinatra is a nice lightweight framework, you are free (forced?) to come up with your own workflow and code for implementing partials and handling such calls. Instead of my explicit route-per-partial, you might choose to define a single regex-based route that looks up the correct data based on the URL or param passed.
In general, if you want Sinatra to respond to a path, you need to add a route. So:
get "/new_game" do
# This block should return a string, either directly,
# by calling haml(:foo), erb(:foo), or such to render a template,
# or perhaps by calling ...to_json on some object.
end
If you want to return a partial without a layout and you're using a view, be sure to pass layout:false as an option to the helper. For example:
get "/new_game" do
# Will render views/new_game.erb to a string
erb :new_game, :layout => false
end
If you want to return a JSON response, you should set the appropriate header data:
get "/new_game" do
content_type :json
{ :foo => "bar" }.to_json
end
If you really want to return raw JavaScript code from your handler and then execute that...well, here's how you return the JS:
get "/new_game" do
content_type 'text/javascript'
# Turns views/new_game.erb into a string
erb :new_game, :layout => false
end
It's up to you to receive the JS and *shudder* eval() it.

Resources