渲染一个表单,该表单创建一个嵌套在另外两个模型下的对象。

时间:2016-02-04 22:16:29

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

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

的routes.rb

class User
{
    private $password;

    public function changePassword(Password $password)
    {
        $this->password = $password;
    }
}

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

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

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

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

<%= 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 %>

我的猜测是它路由到了错误的路径。要使其发挥作用的正确语法是什么?

我认为它应该呈现这条路径

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

从这个角度来看:

  

此功能的目的是在奖励中呈现奖励   referral / show.html.erb page

如果您只打算将奖励的数据呈现为 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

模型目标

def show
  @referal = Referral.all #example
end

show.html.erb 查看#iterate it:

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