2017-10-21 92 views
0

我已经检查旧的类似帖子,但我仍然有问题。Rails 5 - 渲染新参数

当我创建一个新上市的URL看起来如下: http://localhost:3000/listings/new?plan=1

在的form_for我隐藏一些字段时计划= 1

<%= form_for(@listing) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 

    <%= f.hidden_field :plan, :value => @plan %> 

    <%= f.label :Title %> 
    <%= f.text_field :title, class: 'form-control' %> 

    <!-- don't show description for standard plan --> 
    <% if @plan != 1.to_s %> 
    <%= f.label :Description %> 
    <%= f.text_area :description, :rows => 10, 
     placeholder: "Describe your business...", class: 'form-control' %> 
    <% end %> 

在ListingsController我设定的计划在行动之前:

before_action :set_plan,  only: [:new, :create] 

    def set_plan 
     @plan = params[:plan] 
    end 

所以我可以使用它作为上面的窗体上的隐藏字段。

我的问题从保存带有错误的表单开始。 新的表单URL更改为http://localhost:3000/listings。 我可以看到@计划= 1仍是形式:

<input value="1" type="hidden" name="listing[plan]" id="listing_plan" /> 

,但现在的形式显示了所有领域(这应该是由于隐藏这个条件,如果@plan <%= 1.to_s% >)

行动ListingsController:

def new 
    @listing = Listing.new 
    end 

    def create 
    @listing = current_user.listings.build(listing_params) if logged_in? 
    @plan = @listing.plan 

    if @listing.save 
     flash[:success] = "Listing created!" 
     redirect_to @listing 
    else 
     render 'new' 
    end 
    end 

我已经试过类似的东西,但没有成功: 呈现:动作=> '新',:计划=> @ listing.plan 和其他一些东西

如何在错误中隐藏这些字段?

+0

您不能使用'@ plan'访问plan参数,而是使用'params [:plan]' –

+0

当我进入第一个链接时,我在New action中: 参数:!ruby/hash:ActiveSupport :: HashWithIndifferentA CCESS 计划:“1” 控制器:房源 行动:新 但是当我保存与错误它进入创建: 参数:红宝石/哈希:的ActiveSupport :: HashWithIndifferentAccess 计划:“1” 标题:“” 许可:假 承诺:创建清单 控制器:房源 动作:创建 该计划是有,但我做到这一点,他在乞讨时的创建: \ @plan = params [:plan] 它没有得到\ @ plan的值。为什么? – 82skynet

回答

0

您应该可以通过修改您的ListingsController来设置创建计划来解决此问题。具体而言,在ListingsController.rb

# app/controllers/listings_controller.rb 
before_action :set_plan, only: [:new, :create] 

另外,还要确保您的listing_params方法允许:plan

如果您希望此功能在更新时运行,请将:update添加到您的before_action中。

+0

嗨,汤姆,我试过,但没有运气,计划允许params。创建之前的Set_plan没有传递任何值,所以我在Create - \ @ plan = \ @ listing.plan中添加了这一行(请参阅编辑的问题)。我可以在提交的表单上看到错误的值 - ,所以我不明白为什么IF不会没有工作 – 82skynet

0

我修好了。

@plan = params[:plan] 

被返回的字符串(当数据库字段为整数),所以我把它改为:

@plan = params[:plan].to_i 

现在的形式我有下面的所有操作:

<% if @plan != 1 %> 
+0

非常好。真高兴你做到了。 –