我尝试做以下事情: 用户在他的个人资料页面上。现在他编辑了他的个人资料。他点击了更新并保存了数据。 现在我想将用户重定向到另一种profile-edit-page。 我在users_controller.rb中执行了以下操作:
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
flash[:notice] = 'User was successfully updated.'
if(@user.team_id != nil)
format.html { redirect_to(@user) }
else
format.html { redirect_to choose_team_path }
end
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
def choose_team
@user = User.find(params[:id])
end
我创建了一个视图:/users/choose_team.html.erb
现在我收到以下错误:
undefined local variable or method `choose_team_path' for #<UsersController:0x1f56650>
所以我将choose_team添加到我的routes.rb:
map.choose_team 'choose-team', :controller => 'users', :action => 'choose_team'
现在,在提交我的第一个编辑表单后,它会将我重定向到http://localhost:3000/choose-team
我收到以下错误:Couldn't find User without an ID
我想要的: 如果用户没有team_id,则应将其重定向到我的choose_team.html.erb以选择团队,否则应将其重定向到他的个人资料/节目。 怎么做?
编辑:
通过编写format.html { redirect_to :action => "choose_team" }
代替format.html { redirect_to choose_team_path }
,它正在发挥作用。但是如何获得像/ users / 1 / choose_team这样的网址?目前它只是/ choose_team。
答案 0 :(得分:1)
你必须像这样添加你的行动:
map.resources :users, :member=>{:choose-team=>:get}
因为,如果你有一个像index这样的动作,它返回的用户集合应该放在集合哈希中。如果您的操作特定于用户,则必须添加到:成员哈希,现在您将获得类似/users/1/choose_team
答案 1 :(得分:0)
您需要先在map.resources :users
首先选择route.rb
答案 2 :(得分:0)
在route.rb中添加以下行并重新启动服务器
map.resources :users, :collection=>{:choose-team=>:get}
答案 3 :(得分:0)
行
format.html { redirect_to choose_team_path }
没有将id传递给choose_team_path。
您的choose_team
操作使用:id
参数但未提供一个参数。这就是为什么你得到没有ID错误的找不到用户的原因。