【发布时间】:2016-03-01 19:16:35
【问题描述】:
我想与其他用户 not current_user 创建一篇文章,为此我将在会话中将 ID 保存给其他用户 strong> 并且我使用视图中的集合来恢复此 id,到目前为止一切正常,但是当我尝试使用 helper :selected_user 到带有 if 语句 在这里不起作用是我的代码:
def new
if selected_user.present?
@article = selected_user.articles.build state: :step1
render_wizard
else
@article = current_user.articles.build state: :step1
render_wizard
end
end
所以,我想问如果 selected_user.present? 我想用这个 user_id 创建文章但是我想用 current_user 创建它
我的创建方法是:
def create
if selected_user.present?
step = :step1
@article = selected_user.articles.build article_params_step1
@article.state = step.to_s
if @article.save
redirect_to wizard_path(next_step, article_id: @article)
else
render_wizard
end
else
step = :step1
@article = current_user.articles.build article_params_step1
@article.state = step.to_s
if @article.save
redirect_to wizard_path(next_step, article_id: @article)
else
render_wizard
end
end
end
所以,是的,当我运行视图时,控制器会跳转到 else 部分。
只是为了澄清我的 selected_user 不返回 nil 但这里是实现:
selections_controller.rb:
class SelectionsController < ApplicationController
before_action :authenticate_user!
def create
session[:selected_user_id] = params[:user][ :user_id]
redirect_to root_path
end
end
在我的 application_controller.rb 中:
helper_method :selected_user
def selected_user
@selected_user ||= User.find(session[:selected_user_id])
end
在视图中:
<%= form_tag( { :controller => "selections", :action => "create" } , :class => "navbar-form navbar-left") do %>
<%= collection_select(:user, :user_id, User.all, :id, :name, prompt: "Escoge cliente")%>
<%= submit_tag 'Enviar' %>
<% end %>
如果我尝试在未从我的收藏中选择用户的情况下创建文章,则会出现此错误:
Couldn't find User with 'id'=
但是当我从集合中选择我的用户时,一切正常。所以当我不选择使用 current_user 创建的任何内容时,我只是想要。
感谢您的宝贵时间!
问候!
【问题讨论】:
-
能否请您提供
selected_user辅助方法的代码? -
你遇到了什么错误?
-
如果您希望
selected_user返回会话中保存的用户(不是 current_user),但返回的是nil,那么selected_user逻辑似乎有问题。请提供selected_user的实现细节以供进一步审核。 -
好的,谢谢!我编辑了我的帖子@Dharam
-
您检查了
session[:selected_user_id]在selected_user中的值吗?还要检查User.find(session[:selected_user_id])返回的内容。
标签: ruby-on-rails ruby session