2

友谊控制器.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

当我去http://localhost:3000/friendships?friend_id=1我得到

Unknown action

The action 'index' could not be found for FriendshipsController

我遵循了本教程:http ://railscasts.com/episodes/163-self-referential-association

4

2 回答 2

3

您可能将创建配置为 POST 而不是 GET。

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

如果您使用脚手架创建控制器的骨架,情况也是如此。您可以在路由配置中更改此设置。但请注意,通过 GET 创建内容不再被视为完全符合 REST 范式。

于 2012-09-14T21:27:24.827 回答
0

正如在另一篇文章中提到的,这可能是由于 Rails 的默认脚手架将 POST 请求配置为创建。要解决此问题,您可以尝试类似的方法,尽管我不确定它是否会起作用。

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

缺点是GET请求/friendships不会index像默认情况下那样给您操作。

也许你可以用这样的东西来解决这个问题:

match "/all_friendships", :to => "friendships#index", :via => :get, :as => :friendships
于 2012-09-14T21:38:14.990 回答