我正在开发一个简单的工具,可以为团队增加预算。它的工作方式类似于待办事项列表。
删除功能无需重新加载即可,但创建功能需要刷新(数据可以很好地添加到数据库中)。
这是create.js.erb
$('.budget_items').append("<%= j render partial: 'budget', locals: {budget: @budget} %>");
这是部分:_budget.html.erb
<li id="<%= budget.id %>">
<%= budget.budget_item %>
<%= budget.quantity %>
<%= budget.cost_per_item %>
Total cost: <%= budget.quantity * budget.cost_per_item %>
<%= link_to "delete budget item", project_team_budget_path(@project, @team,
budget), method: 'delete', remote: true %>
</li>
<h1>My Estimated Budget</h1>
<h3>Total Budget: </h3>
<%= simple_form_for [@project, @team, @budget], remote: true do |f| %>
<div class="form-group">
<%= f.input :budget_item %>
</div>
<div class="form-group">
<%= f.input :quantity %>
</div>
<div class="form-group">
<%= f.input :cost_per_item %>
</div>
<div class="form-group">
<%= f.submit "Add budget item" %>
</div>
<% end %>
<ul class="budget_items">
<%= render @budgets %>
</ul>
这是预算控制器:
class BudgetsController < ApplicationController
def index
@budgets = Budget.all
end
def create
@team = Team.find(params[:team_id])
@budget = @team.budgets.create(budget_params)
respond_to do |format|
format.html { redirect_to project_team_budgets_path }
format.js { }
end
end
def destroy
@team = Team.find(params[:team_id])
@budget = @team.budgets.find(params[:id])
@budget.destroy
respond_to do |format|
format.html { redirect_to project_team_budgets_path }
format.js { }
end
end
private
def budget_params
params.require(:budget).permit(:title, :budget_item, :quantity, :cost_per_item)
end
end
答案 0 :(得分:0)
我们最终在budgets_controller中添加了set_project方法。
def set_project
@project = Project.find(params[:project_id])
end
为它设置before_action。我认为我们遇到的问题是它正在寻找一个project_id但我们在创建一个新的预算项目时没有将它传递给项目。
答案 1 :(得分:0)
如果在.html.erb中包含遥控器,也许会有所帮助。也许会有点困难,但长期回报会更好。
这里有一个基本教程http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html。
最好!