【问题标题】:Rails does not appear to hit my controllerRails 似乎没有击中我的控制器
【发布时间】:2013-12-16 05:23:37
【问题描述】:

当我使用调试器执行此操作时,它不会影响控制器。

我收到以下错误:

为 nil 调用 id,它会错误地为 4 -- 如果你真的想要 nil 的 id,请使用 object_id

@user 为零。 @user 为零,即使我将其设置为通过@user = @Users.first 查找第一个

我想通过 domain.com/id 访问用户

Routes.rb

match ':id' => 'user#show'

型号

class User < ActiveRecord::Base
   attr_accessible :userLink, :userName
end

控制器控制器/user_controller.rb

def Show
    @user= User.find_by_id params[:id]
    # Attempted this with User.first to see if param was broken    

    respond_to do |format|
       format.html
       format.json { render json: @user}
    end
end

查看文件名views/user/show.erb

<script type="text/javascript">
    <%=  @user.id %>
</script>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rails-activerecord erb


    【解决方案1】:

    你有一个错字。

    您的控制器中的def Show 应该是def show

    【讨论】:

    • 谢谢!我习惯了 C# 并用大写字母编写我的方法!
    • 我从 java 过渡,在我的代码库中使用 rubocop 有助于更多地采用“ruby”方式。另请注意,匹配被认为是“不安全的”。如果您的项目是开源的,请查看pullreview
    • 哇,感谢您对工具的建议!这些看起来是非常有用的工具。静态类型语言和 Visual Studio 很容易造成这些微小的错误。
    【解决方案2】:

    你不需要像这样指定路线

    替换掉这个

    match ':id' => 'user#show'
    

    resources :users, only: [:show]
    

    这将为您生成 show 方法的默认路由

    【讨论】:

    • 我喜欢这种风格:resources :users, only: [:show] 我会用这种风格更新我的代码,因为它很清晰并且避免了这些类型的错误。
    • 是的,它更好的rails风格。
    • 别忘了给答案投票,这样它也可以帮助其他人关注它
    【解决方案3】:

    使用

    match '/:id' => 'user#show'
    

    但这不是一个好方法,因为您的许多路线将被禁用 就像如果你有 www.yourdomain.com/profile 也会进入你的表演动作。

    也 def 在这里显示 应该显示

    【讨论】:

    • 我故意禁用了其他路径。我正在构建的应用程序只需要创建和显示用户对象。我不希望用户控制删除或更新用户数据。感谢您的建议,因为我是 Rails 新手。如果我决定为自己添加管理员设置,我可能会重新考虑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多