Ruby on rails 显示通过嵌套表单捕获的项目
我正在尝试建立一个小的费用跟踪应用程序。使用嵌套的表单gem添加行项目。有一个接受嵌套属性的费用模型。项目属于费用,并且存在外键关联。这是费用控制员:Ruby on rails 显示通过嵌套表单捕获的项目,ruby-on-rails,Ruby On Rails,我正在尝试建立一个小的费用跟踪应用程序。使用嵌套的表单gem添加行项目。有一个接受嵌套属性的费用模型。项目属于费用,并且存在外键关联。这是费用控制员: class ExpensesController < ApplicationController def new @expense = Expense.new @item = @expense.items.build end def index @expenses =
class ExpensesController < ApplicationController
def new
@expense = Expense.new
@item = @expense.items.build
end
def index
@expenses = Expense.all
#@items = Item.where(:expense_id => @expense.id)
end
def show
@expense = Expense.find(params[:id])
@items = Item.where(:expense_id => @expense.id)
end
def create
@expense = Expense.new(expense_params)
respond_to do |format|
if @expense.save
format.html { redirect_to @expense, notice: 'Expense Report Submitted.' }
format.json { render :show, status: :created, location: @expense }
else
format.html { render :new }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end
def edit
@expense = Expense.find(params[:id])
end
def update
@expense = Expense.find(params[:id])
if @expense.save(expense_params)
flash[:notice] = "Expense Report Updated"
redirect_to @expense
else
render 'edit'
end
end
def destroy
@expense = Expense.find(params[:id])
@expense.destroy
redirect_to 'root'
end
private
def expense_params
params.require(:expense).permit(:department_id, :expense_type_id, :notes, items_attributes: [:id, :description, :amount, :issue_date, :_destroy])
end
end
class ExpensesController@expense.id)
结束
def秀
@费用=费用。查找(参数[:id])
@项目=项目。其中(:expense\u id=>@expense.id)
结束
def创建
@费用=费用。新建(费用参数)
回应待办事项|格式|
如果@expense.save
format.html{将_重定向到@expense,注意:“已提交费用报告”。}
format.json{render:show,status::created,location:@expense}
其他的
format.html{render:new}
format.json{render json:@expense.errors,status::unprocessable_entity}
结束
结束
结束
定义编辑
@费用=费用。查找(参数[:id])
结束
def更新
@费用=费用。查找(参数[:id])
如果@expense.save(费用参数)
flash[:通知]=“费用报告已更新”
将_重定向到@expense
其他的
渲染“编辑”
结束
结束
def销毁
@费用=费用。查找(参数[:id])
@毁灭
将_重定向到“根”
结束
私有的
定义费用参数
参数require(:expense).permit(:部门id、:费用类型id、:备注、项目属性:[:id、:说明、:金额、:发行日期、:\u销毁])
结束
结束
该表单如下所示:
<%= nested_form_for (@expense) do |f| %>
<% if @expense.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@expense.errors.count, "error") %> prohibited
this expense from being saved:</h2>
<ul>
<% @expense.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class"row">
<div class="col-md-8">
<div class="form-group">
<%= f.label :department_id %><br>
<%= f.collection_select(:department_id, Department.all, :id, :department_name, prompt: true, class: "dropdown-menu") %>
</div>
<div class="form-group">
<%= f.label :expense_type_id %><br>
<%= f.collection_select(:expense_type_id, ExpenseType.all, :id, :expense_name, prompt: true, class: "form-control") %>
</div>
<%= f.fields_for :items do |i| %>
<div class="form-group">
<%= i.label :description%>
<%= i.text_field :description, class: "form-control" %>
</div>
<div class="form-group">
<%= i.label :amount%>
<%= i.text_field :amount, class: "form-control" %>
</div>
<div class="form-group">
<%= i.label :issue_date%>
<%= i.date_select :issue_date, class: "form-control" %>
</div>
<%= i.link_to_remove "Remove", class: "btn btn-default" %>
<% end %>
<div><p><%= f.link_to_add "Add Expense", :items, class: "btn btn-default" %></p></div>
<div class="form-group">
<%= f.label :notes %>
<%= f.text_area :notes, class: "form-control" %>
</div>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</div>
</div>
<% @expenses.each do |expense| %>
<tr>
<td><%= expense.item.description %></td>
<td><%= number_to_currency(expense.item.amount) %></td>
<td><%= expense.item.issue_date %></td>
<% end %>
禁止
这项费用将无法节省:
当我点击提交时,费用和项目被保存。我使用Sqlite浏览器进行了检查,并为每个项目捕获了外键值
索引文件如下所示:
<%= nested_form_for (@expense) do |f| %>
<% if @expense.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@expense.errors.count, "error") %> prohibited
this expense from being saved:</h2>
<ul>
<% @expense.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class"row">
<div class="col-md-8">
<div class="form-group">
<%= f.label :department_id %><br>
<%= f.collection_select(:department_id, Department.all, :id, :department_name, prompt: true, class: "dropdown-menu") %>
</div>
<div class="form-group">
<%= f.label :expense_type_id %><br>
<%= f.collection_select(:expense_type_id, ExpenseType.all, :id, :expense_name, prompt: true, class: "form-control") %>
</div>
<%= f.fields_for :items do |i| %>
<div class="form-group">
<%= i.label :description%>
<%= i.text_field :description, class: "form-control" %>
</div>
<div class="form-group">
<%= i.label :amount%>
<%= i.text_field :amount, class: "form-control" %>
</div>
<div class="form-group">
<%= i.label :issue_date%>
<%= i.date_select :issue_date, class: "form-control" %>
</div>
<%= i.link_to_remove "Remove", class: "btn btn-default" %>
<% end %>
<div><p><%= f.link_to_add "Add Expense", :items, class: "btn btn-default" %></p></div>
<div class="form-group">
<%= f.label :notes %>
<%= f.text_area :notes, class: "form-control" %>
</div>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</div>
</div>
<% @expenses.each do |expense| %>
<tr>
<td><%= expense.item.description %></td>
<td><%= number_to_currency(expense.item.amount) %></td>
<td><%= expense.item.issue_date %></td>
<% end %>
我尝试了通常的组合(比如expense.item.description),通过遍历一个块,但它们不起作用。我想知道如何在显示和索引页面中显示费用和相关项目 看看你的新动作,在你的模型中
class Expense < ActiveRecord::Base
has_many :items
accepts_nested_attributes_for :items
end
课程费用
因此,当您在视图中执行expense.items时,它会为您提供一个活动记录关系(因为expense有许多项目),请尝试以下操作:
<% @expenses.each do |expense| %>
<% expense.items.each do |item| %>
<tr>
<td><%= item.description %></td>
<td><%= number_to_currency(item.amount) %></td>
<td><%= item.issue_date %></td>
</tr>
<% end %>
<% end %>
非常感谢,伙计。从早上起你帮了很多忙。非常感谢@用户3224820我的荣幸:)