用:slug而不是:id的form_for

问题描述

<%= form_for [current_user,@task] do |f| %>

给出了users/:id/tasks,但是我在使用时需要users/:slug/tasks

resources :users,param: :slug do
  resources :tasks,only: [:index,:new,:create]
end

但如果我使用:

<%= form_for [current_user.slug,@task] do |f| %>

我得到:NoMethodError: undefined method 'jemelle_visits_path' for

如何获取users/jemelle/tasks呢?

解决方法

我认为您需要重写模型的to_param方法:

https://apidock.com/rails/ActiveRecord/Base/to_param

user = User.find_by_name('Phusion')
user_path(user)  # => "/users/1"

您可以在模型中覆盖to_param,以使user_path使用用户名而不是用户ID来构建路径:

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by_name('Phusion')
user_path(user)  # => "/users/Phusion"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...