Rails 5 - 使用参数渲染新的

时间:2017-10-21 10:41:44

标签: ruby-on-rails form-for

我查过旧的类似帖子,但我仍然遇到问题。

当我创建新的商家信息时,网址如下所示: 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 

所以我可以将它用作上面表格中的隐藏字段。

当我保存表单时出现错误,我的问题就出现了。 新表单网址将更改为http://localhost:3000/listings。 我可以在表格上看到@ plan = 1:

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

,但现在表单显示所有字段(由于此条件应该隐藏&lt;%if @plan!= 1.to_s%&gt;)

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

我尝试过类似的东西,但没有成功: render:action =&gt; &#39; new&#39;,:plan =&gt; @ listing.plan 和其他一些事情

如何在出错时隐藏这些字段?

2 个答案:

答案 0 :(得分:0)

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

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

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

如果您希望此功能在更新时发挥作用,请同时将:update添加到before_action

答案 1 :(得分:0)

我修好了。

@plan = params[:plan]

返回字符串(当DB中的字段为整数时),所以我将其更改为:

@plan = params[:plan].to_i

现在以下面的表格我所有的行动:

<% if @plan != 1 %>