我正在构建一个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动作中呈现它。
答案 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%>