【问题标题】:Template is missing in action动作中缺少模板
【发布时间】:2012-12-12 11:49:22
【问题描述】:

我在UsersController中写了一个“follow”方法

def start_following
    @user = current_user
    @user_to_follow = User.find(params[:id])
    unless @user_to_follow == @user
        @follow_link = @user.follow_link.create(:follow_you_id => @user_to_follow.id, :user_id => @user.id)
        @user.save
        flash[:start_following] = "You started following" + @user_to_follow.name 
    else
        flash[:cant_follow] = "You cannot follow yourself"
    end
end

很简单。在视图中,我有

<%= link_to 'Follow', follow_user_path(@user) %>

在路线中,

resources :users do
 member do
    get 'follow' => "users#start_following", :as => 'follow'

当我点击链接时,它会抱怨:Missing template users/start_following

那么,我如何让它在操作后停留在同一页面上? 我想留在的视图页面是 Show view of the user is to be follow。 例如:用户/{user_id}。只是重定向不是解决方案吗?我以为添加 redirect_to {somewhere} 会消除错误,但事实并非如此。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 redirect missing-template


    【解决方案1】:

    我会重定向到有问题的用户。如果您使用的是标准资源丰富的路线,那么您可以这样做

    redirect_to(@user_to_follow)
    

    顺便说一句,让 GET 请求进行更改通常被认为是不好的做法 - 人们通常对这些使用 put/patch/post/delete 请求。您可能会在用户没有实际点击链接的情况下与浏览器预取链接发生冲突。

    【讨论】:

    • 感谢旁注。如何使它成为 PUT 请求而不是 GET?
    • 将您的路线文件更改为 put 而不是 get 然后添加 :method => :put 到您的 link_to (需要 rails javascript 的东西)或使其成为一个表单(button_to 可以快速快捷方式)
    【解决方案2】:

    试试:

    redirect_to :back, :notice => "successfully followed someone..."
    

    【讨论】:

      【解决方案3】:

      是的redirect_to 解决了你的问题,我怀疑你忘了把它添加到unless 的两个分支中

      代码如下所示:

      def start_following
          @user = current_user
          @user_to_follow = User.find(params[:id])
          unless @user_to_follow == @user
              @follow_link = @user.follow_link.create(:follow_you_id => @user_to_follow.id, :user_id => @user.id)
              @user.save
              flash[:start_following] = "You started following" + @user_to_follow.name 
          else
              flash[:cant_follow] = "You cannot follow yourself"
          end
          redirect_to @user_to_follow
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 2012-05-09
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多