Ruby on rails 创建属于并且拥有多个路由、控制器和视图?
我正在创建一个项目,允许用户登录并在登录后推荐其他用户。用户有很多推荐,推荐属于用户。我想有一个页面,一旦当前用户登录,他们可以输入一个带有参数的转介:名称和转介电子邮件。但这是一个协作项目,设置用户身份验证的人使用的是设计。目前,我遇到以下错误:Ruby on rails 创建属于并且拥有多个路由、控制器和视图?,ruby-on-rails,devise,routes,user-defined-functions,has-and-belongs-to-many,Ruby On Rails,Devise,Routes,User Defined Functions,Has And Belongs To Many,我正在创建一个项目,允许用户登录并在登录后推荐其他用户。用户有很多推荐,推荐属于用户。我想有一个页面,一旦当前用户登录,他们可以输入一个带有参数的转介:名称和转介电子邮件。但这是一个协作项目,设置用户身份验证的人使用的是设计。目前,我遇到以下错误: undefined method `resource' for #<ReferralsController:0x007fb75735aa00> 问题来自设计错误消息在你的推荐视图中-删除它。只有用户资源被设置为与designe一起工作,
undefined method `resource' for #<ReferralsController:0x007fb75735aa00>
问题来自
设计错误消息代码>在你的推荐视图中-删除它。只有用户
资源被设置为与designe一起工作,没有其他设置
如评论中所述,您应该重新考虑将引用作为用户下的嵌套资源-这样做对您使用它的方式并没有任何好处,而且存在很大的错误空间。保持简单 删除“用户”下作为嵌套路由的“转介”。因为它总是应用于当前用户,所以它应该是一个简单的资源,而不是嵌套的。另外,你的推荐-显示动作逻辑是有问题的,你可能想看一下。谢谢!但是现在我在新的referral视图中得到了#的未定义方法“referral”,它来自您视图中的代码
(以及下一行的文本_字段)。:reference
属性显然不存在于您的推荐模型中(这很有意义)。请发布您的推荐模型中存在的属性,这些属性可能反映在此表单中输入的数据。
class UsersController < ApplicationController
def new
end
class ReferralsController < ApplicationController
def new
@referral = Referral.new
end
def create
@referral = current_user.referrals.new(referral_params)
if @referral.save
redirect_to @referral
else
render 'new'
end
end
def show
@referrals = current_user.find_by_user_id(params[:user_id]).referrals.all
end
def index
@referrals = current_user.referrals.all
end
def edit
@referral = Referral.find(params[:id])
end
def update
@referral = Referral.find(params[:id])
if @referral.update(referral_params)
redirect_to @referral
else
render 'edit'
end
end
def destroy
@referral = Referral.find(params[:id])
@referral.destroy
redirect_to referral_path
end
private
def referral_params
params.require(:referral).permit(:name, :email, :user_id)
end
end
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
has_many :referrals
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
include RoleModel
# attr_accessible :email, :password, :password_confirmation, :school_name, :sport, :roles, :roles_mask
roles_attribute :roles_mask
roles :admin, :coach, :guest
end
class Referral < ActiveRecord::Base
belongs_to :user
end
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %></div>
<div><%= f.label :school_name %><br />
<%= f.text_field :school_name %></div>
<div><%= f.label :sport %><br />
<%= f.text_field :sport %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "off" %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render "devise/shared/links" %>
<h2>Refer a coach </h2>
<%= form_for ([current_user, @referral]), :html => { :mulitpart => true } do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :referral %><br />
<%= f.text_field :referral %></div>
<div><%= f.label :referral_email %><br />
<%= f.email_field :referral, autofocus: true %></div>
<div><%= f.submit "Refer This Coach" %></div>
<% end %>
Blog::Application.routes.draw do
devise_for :users
resources :users do
resources :referrals
end
get 'sessions/new'
get 'users/new'
resources :articles do
resources :comments
end
root 'welcome#index'
end