Change redirect_to format to :js in Rails
rails format.js redirect
format json rails
rails render js
format js rails
rails redirect_to format
rails respond_to
I have a controller action that should only be accessed by users that are logged in. If the user is not logged in, I want to redirect them to the login form, which an ajax-powered lightbox. Although the initial request is in html
format, I need to change is to js
. Right now, I'm trying it like this:
def new if user_signed_in? @company = Company.new else redirect_to new_user_session_path, format: 'js' end end
Unfortunately, it's still treating the redirect as though it's in the html
format. Is there someway to get the redirect to be treated as js
?
I was try this in rails 3.2.13 n it's works, i hope it's can solve
if user_signed_in? ..... else if request.xhr? flash[:notice] = "Please login." flash.keep(:notice) render :js => "window.location = #{new_user_session_path}" else ..... end end
Rails: how to set json format for redirect_to, I read apidock some more It was quite simple. I just should specify format in path helper like this: redirect_to user_path(@user, format: :json). Working with JavaScript in RailsThis guide covers the built-in Ajax/JavaScript functionality of Rails (and more); it will enable you to create rich and dynamic Ajax applications with ease!After reading this guide, you will know: The basics of Ajax. Unobtrusive JavaScript. How Rails' built-in helpers assist you. How to handle Ajax on the server side. The Turbolinks gem. How to include your
I think you might be looking for a respond_to block along with that before filter mentioned earlier:
class CompaniesController < ApplicationController before_filter :login def new @company = Company.new render json: @company, layout: false # layout false if you do not want rails to render a page of json end private def login if !user_signed_in? #your login code here end end end
Don't forget to set your dataType ajax option to json:
$.ajax({ url: "company/new" //your rails url, what is there is just my best guess data: query, //whatever paramaters you have dataType: "json", // or html, whichever you desire type: "GET", success: function (data) { //your code here } });
Rails 5 not responding with :js after redirect · Issue #26279 · rails , On rails 4.2 I used to submit my form via ajax, and redirect to another action for your controller action, as some rendering behavior has changed for Rails 5. as js #in rails 5.0 - responsed as html else respond_to do |format| If you are using a gem that reads to URI for certain processing (like simple-navigation) the new URI will be '/users' even though you are at the '/welcome' URI (highlight is lost in simple-navigation and submenus are not rendered).
For anyone coming to this and using Rails 5 I did this and this works inside the youractionname.js.erb file if one sets a @redirect variable inside the controller youractionname function when one wants to redirect.
# ruby control flow <% if @redirect != nil %> // javascript call to use rails variable as redirect destination. location.replace("<%=@redirect%>"); <% end %>
Redirecting with 'remote: true' - Arielle Sullivan, I set the form up with remote: true and a js.erb file to send the messages. to successfully redirect with the flash message after implementing the change below: Interpolating the rails path in the request is preferable to hardcoding the url, Types array shorthand. You can have respond_to blocks that look like this:. respond_to do | format | format. html format. xml end. Here each individual format doesn’t receive a block and so Rails automatically tries to render the appropriate view for the mime type (e.g. action.html.erb, action.xml.erb or as a last resort action.erb)
Redirection in format.json - Rails, I have presently a render :json which modify the current page if if @request.save format.html { redirect_to(@request) } format.json { render :json => { :result => 'success', :request redirects to :show with a format .js. I thought First we’ll go through the basics of setting up the Rails app, then adding jQuery and Ajax to add items without reloading the page. Finally, we’ll refactor with remote: true. Feel free to code along! The Basic Rails Todo App. Before getting to Ajax, here are the steps to create the basic rails todo app we’ll be building on: 1) rails new
Layouts and Rendering in Rails, render file: "/path/to/rails/app/views/books/edit.html.erb" JSON is a JavaScript data format used by many Ajax libraries. Rails can render vanilla JavaScript: redirect_to and redirect_back do not halt and return immediately from method In this case, the only change we will need to make is to the redirect_to statement, to handle successful updates. Update it to redirect to shark_post_path(@shark), which will redirect to the index view of the selected shark’s posts:
Working with JavaScript in Rails, Working with JavaScript in RailsThis guide covers the built-in Ajax/JavaScript functionality of Rails (and more); it will How Turbolinks Works; Page Change Events format.html { redirect_to @user , notice: 'User was successfully created.' }. Because of Unobtrusive JavaScript, the Rails "Ajax helpers" are actually in two parts: the JavaScript half and the Ruby half. Unless you have disabled the Asset Pipeline, rails.js provides the JavaScript half, and the regular Ruby view helpers add appropriate tags to your DOM. 3.1 form_for. form_for is a helper that assists with writing forms.
Comments
- Have you tried a before filter? guides.rubyonrails.org/action_controller_overview.html
- Thanks for the tip! That cleans up my code a lot, but it doesn't address the main problem I'm having, which is changing the format from
html
tojs
. If have any more tips about that, please let me know. - I think you might have to redirect them to a page and then trigger the light osx box modal.
- @simonmorley This is the approach I ended up using.
- Unfortunately, in 4.0 this doesn't work. The
js
is still rendered ashtml
, so all I get is an unformatted page with the textrender :js => "window.location = #{new_user_session_path}"
. Thanks though. - Thanks for the reply. Unfortunately, the problem is that the link to "New Company" is not
remote: true
, so I'm sending a request inhtml
format, notjs
. Somehow, I need to tell Rails to return the request asjs
instead. - If you just want json resturned from this controller method, all you have to do is a render json: @company, layout: false. I edited my answer to include this code.
- Unfortunately, this just isn't working. Perhaps something has changed for Rails 4?