gpt4 book ai didi

ruby-on-rails-4 - Rails 实例变量未传递给带有 "Render"的 View

转载 作者:行者123 更新时间:2023-12-03 23:38:06 24 4
gpt4 key购买 nike

基本的 rails 问题..我有以下问题:一个用户有很多包,一个包属于一个类别。在新的包形式中,我想用包的类别创建一个选择字段。我有以下代码:

      def new_pack
@pack=Pack.new()
@user= User.find(params[:id])
@categories = Category.all
end

def create
@pack=Pack.new(pack_params)
@user= User.find(params[:user_id])
if @pack.save
@user.packs << @pack
flash[:notice]="Thank you!"
redirect_to(:action=>'attempt_activation', :id=> @pack.id)
else
render :action=> "new_pack", :id=>@user.id
end
end

在我看来:

      <%= form_for(:pack, :url=>{:controller=> "packs", :action=>'create', :user_id=>                 @user.id}) do |f| %>
<h5>Registration takes less than 2 minutes.</h5>
<label>Title<b style="color:red;">*</b>
<%= f.text_field(:title, :placeholder=>"") %>
</label>
<label>Category<b style="color:red;">*</b>
<%= f.select(:category_id, @categories.map {|s| [s.title, s.id]}, :selected=> @categories.second) %>
...

问题在于,如果表单中存在错误并且必须再次呈现 new_pack 操作,则会抛出错误:

       ActionView::Template::Error (undefined method `map' for nil:NilClass):
</div>
<div class="large-4 columns">
<label>Category
<%= f.select(:category_id, @categories.map {|s| [s.title, s.id]}, :selected=> @pack.category) %>
</div>

为什么会这样? render 用于使用操作中可用的实例变量来呈现特定 View ,但此处不会再次加载@categories。

谢谢。

最佳答案

在创建方法中添加@categories = Category.all:

def create
@pack = Pack.new(pack_params)
@user = User.find(params[:user_id])
if @pack.save
@user.packs << @pack
flash[:notice] = "Thank you!"
redirect_to(:action => 'attempt_activation', :id => @pack.id)
else
@categories = Category.all
render :action=> "new_pack", :id => @user.id
end
end

关于ruby-on-rails-4 - Rails 实例变量未传递给带有 "Render"的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com