【问题标题】:Rendering a form that creates an object that is Nested under two other models.呈现一个创建嵌套在其他两个模型下的对象的表单。
【发布时间】:2016-02-04 22:16:28
【问题描述】:

我正在构建一个 Rails 应用程序,该应用程序有一个在两个对象下创建/嵌套的对象。

Routes.rb

resources :pages do
     resources :referralpages do
      resources :rewards do
      end
     end
  end

我刚刚添加了奖励资源,并将其用于创建新奖励的表单

<%= form_for ([@referralpage, @reward]) do |f| %>
  <% if @reward.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@reward.errors.count, "error") %> prohibited this reward from being saved:</h2>

      <ul>
      <% @reward.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="form-group">
    <%= f.label :name %><br>
    <%= f.text_field :name, class: "form-control" %>
  </div>
   <div class="form-group">
    <%= f.label :level %><br>
    <%= f.text_field :level, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :dscount %><br>
    <%= f.text_field :discount, class: "form-control" %>
  </div>
  <div class="actions">
    <%= f.submit class: "btn btn-primary" %>
  </div>
<% end %>

我需要帮助来让 form_for ([@referralpage, @reward]) 部分正常工作。

这是我在点击新奖励按钮时收到的错误消息:

undefined method `referralpage_rewards_path'
<%= form_for ([@referralpage, @reward]) do |f| %>

我的猜测是它路由到了错误的路径。让它工作的正确语法是什么?

我认为它应该渲染这条路径

 new_page_referralpage_reward

此功能的重点是在referral/show.html.erb页面中呈现奖励

我在我的奖励视图文件中创建了一个索引部分,并在referpages/show.html.erb 文件的显示操作中呈现它。

【问题讨论】:

    标签: ruby-on-rails nested-forms nested-resources


    【解决方案1】:

    我认为您不能在 form_for 中放置多个资源路径,这会导致路径无效。

    为什么要在表单中放入 2 个资源路径? 您是否计划为推荐和奖励模型保存相同的数据? 如果,是的,只使用一个路径并在您的控制器中创建一个创建方法以保存到其他模型。

    从这个角度来看:

    此功能的重点是在 推荐/show.html.erb页面

    如果您只打算将rewards的数据呈现给referral/show.html.erb

    在您的推荐控制器

    def show
       @rewards = Reward.all #example
    end
    

    除非,你有这样的模型关系:

    #Reward Model
    belongs_to :refferal
    
    #Referral Model
    has_many :rewards or has_one :reward
    

    使用模型relationship

    def show
      @referal = Referral.all #example
    end
    

    show.html.erb 查看#迭代它:

    <%for referral in @referral%>
      <% referral.rewards %> # need to iterate if has many
      or
      <%= referral.reward... %>
    <%end%>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多