ruby on rails use “create” method in controller as GET not working

北城以北 提交于 2021-02-10 09:33:06

问题


friendships_controller.rb

class FriendshipsController < ApplicationController

  # POST /friendships
  # POST /friendships.json
  def create

    #@friendship = Friendship.new(params[:friendship])
    @friendship = current_user.friendships.build(:friend_id => params[:friend_id])

    respond_to do |format|
      if @friendship.save
        format.html { redirect_to user_profile(current_user.username), notice: 'Friendship was successfully created.' }
        format.json { render json: @friendship, status: :created, location: @friendship }
      else
        format.html { redirect_to user_profile(current_user.username), notice: 'Friendship was not created.' }
        format.json { render json: @friendship.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /friendships/1
  # DELETE /friendships/1.json
  def destroy
    @friendship = Friendship.find(params[:id])
    @friendship.destroy

    respond_to do |format|
      format.html { redirect_to friendships_url }
      format.json { head :no_content }
    end
  end
end

when i go to http://localhost:3000/friendships?friend_id=1 i get

Unknown action

The action 'index' could not be found for FriendshipsController

I followed this tutorial : http://railscasts.com/episodes/163-self-referential-association


回答1:


You probably configured the create as a POST not a GET.

  # POST /friendships
  # POST /friendships.json
  def create

This is also the case if you used scaffolding to create a skeleton of your controller. You could change this in the routes configuration. But be aware, that creating stuff via GET is no longer seen as completely conform to the REST paradigm.




回答2:


As mentioned in the other post, this is probably caused due to the fact that the default scaffolding for rails configures POST requests to work as create. To fix this, you can try something like this, although I'm not sure it will work.

   match "/friendships" => "friendships#create", :via => [:get]
   get   "/friendships" => "friendships#create"

The downside is that a GET request to /friendships will not give you the index action, as is the default case.

Maybe you can fix this with something like this:

match "/all_friendships", :to => "friendships#index", :via => :get, :as => :friendships


来源:https://stackoverflow.com/questions/12432149/ruby-on-rails-use-create-method-in-controller-as-get-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!