Ruby on rails 渲染视图问题
他们是两个用户:Ruby on rails 渲染视图问题,ruby-on-rails,model-view-controller,view,Ruby On Rails,Model View Controller,View,他们是两个用户: 用户-登录用户 访客-未登录访客 用户和来宾可以发布问题。若要发布问题,客人必须指定他的电子邮件 它们是两个视图“new.html.erb”和“new_for_guest.html.erb”。第一个依赖于@user变量。第二个没有 当来宾创建的问题验证失败时,应呈现“new_for_guest.html.erb”,并保留所有输入的数据 代码如下: def new @question = Question.new guest = session[user_id].nil
def new
@question = Question.new
guest = session[user_id].nil?
respond_to do |format|
if guest
format.html { render "new_for_guest" }
else
format.html { render "new" }
end
end
end
def create
@question = Question.new(params[:question])
guest = session[user_id].nil?
respond_to do |format|
if @question.save
flash[:notice] = 'Question was successfully created.'
format.html { redirect_to(@question) }
else
if guest
format.html { render :action => "new_for_guest" } # problem
else
format.html { render :action => "new" }
end
end
end
当guest验证失败并且呈现“new_for_guest”视图时,我会在浏览器中看到url“/questions”,而不是“/questions/new”。因此,用于“新建”操作的所有样式表都不存在了
当用户验证失败并且呈现“new”视图时,我看到正确的url“/questions/new”,一切正常
当我说
format.html{ redirect_to new_question }
“新建”操作将被呈现,但用户输入的所有数据都将消失
我需要在“问题/新”上下文中呈现“新客户”视图
怎么做
更新
我注意到了由scaffold生成的未触及代码的相同行为
通过创建验证失败时,将再次呈现新操作,但在URL中显示“/questions”而不是“/questions/new”
这很奇怪。这是正确的行为吗
我发现了类似的未回答问题这是正确的行为。按照RESTful路由,当为对象发布表单时,它被发送到
/object
URI,这意味着创建了一个ID未知的新对象。因此,当验证失败且仅呈现新操作时,您位于该URI而不是/object/new
URI上
此外,您不应该让您的样式针对每个操作,因为那里肯定会有不必要的代码冗余(我甚至不知道您是如何做到这一点的,以至于当URI更改时它不起作用)。对于一个操作,有多个视图也是一样,这很少是绝对必要的,而且在您的情况下似乎不是这样,因为当它是来宾时,您可以简单地使用一个空的
@user
对象。为什么要为每个操作定义样式表?你不能让它们依赖于视图吗?因为我根据布局决定要包含哪些资产包(css和js),具体取决于执行的控制器和操作。