简体   繁体   中英

link_to remote: true redirecting to HTML

At the /tags page I have a link with remote: true . It should be a link to an ajax request. But there are two requests, as JS and as HTML.

<%= link_to 'New', new_tag_path, class: "btn btn-outline btn-primary", remote: true %>

INFO -- : Started GET "/tags/new" for 192.168.18.236 at 2018-06-13 11:44:18 -0300
INFO -- : Processing by TagsController#new as JS
INFO -- :   Rendered tags/_form.html.erb (41.0ms)
INFO -- :   Rendered tags/_modal.html.erb (41.5ms)
INFO -- :   Rendered tags/new.js.erb (49.2ms)
INFO -- : Completed 200 OK in 63ms (Views: 50.3ms | ActiveRecord: 2.2ms)
INFO -- : Started GET "/tags/new" for 192.168.18.236 at 2018-06-13 11:44:18 -0300
INFO -- : Processing by TagsController#new as HTML
INFO -- : Completed 500 Internal Server Error in 14ms (ActiveRecord: 1.9ms)
FATAL -- : 
ActionView::MissingTemplate (Missing template tags/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:

If I provide a new.html.erb , this MissingTemplate error is over, but the page is redirected to new.html. What could be wrong with that request or that link?

Edit The controller code class TagsController < ApplicationController before_action :set_tag, only: [:show, :edit, :update, :destroy, :fix_correct_name] before_action :set_tags, only: [:new, :edit]

  # GET /tags/new
  def new
    @tag = Tag.new
  end

  # GET /tags/1/edit
  def edit
  end

  # POST /tags
  def create
    @tag = Tag.new(tag_params)

    respond_to do |format|
      if @tag.save
        format.html { redirect_to action: "index", notice: 'Tag adicionada.' }
      else
        format.html { render :new }
      end
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_tag
      @tag = Tag.find(params[:id])
    end

    def set_tags
      @tags = Tag.all.pluck(:name, :id)
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def tag_params
      params.fetch(:tag, {}).permit(:name, :parent_id, :tag_name, :parent_name, :no_parent)
    end
end

In your new action, you'll need a response_to to handle the ajax call

def new
  @tag = Tag.new
  respond_to { |format| format.js }
end 

Also, you'll need a new.js.erb file and a _new.html.erb partial to handle the response and update the view.

Inside your new.js.erb, you will have to render the view with something like this

$(“div-id-name”).html(“<%= j render partial: “new” %>”) 

And your new partial will simply hold your form (or whatever is it you wanna render)

我做到了现在的工作,只更换require jquery_ujs通过require rails-ujsapplication.js ,加入轨-UJS宝石。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM