我所做的是在rails的博客文章教程中创建微博(管理),但现在编辑,销毁和新工作。显示没有
现在我收到以下错误
NoMethodError in Managments#show
undefined method `id' for nil:NilClass
<li id="@managment-<%= @managment.id %>" > <- cause of the problem
<%= link_to gravatar_for(@managment.user, size: 50), @managment.user %>
<div class="user"><%= link_to @managment.user.name, @managment.user %></div>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" onclick="calculateManagement()" href="#home">@managment</a></li>
管理控制器:
class ManagmentsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def index
@managments = current_user.managments
end
def show
@user = User.find(params[:id])
@managment = current_user.managments.find_by_id(params[:id])
end
def new
@user = User.new
@managment = Managment.new
end
def edit
@managment = Managment.find(params[:id])
end
def create
@managment = current_user.managments.build(managment_params)
if @managment.save
flash[:success] = "Managment created!"
redirect_to @managment
else
@feed_items = current_user.feed.paginate(page: params[:page])
render 'new'
end
end
def update
@managment = Managment.find(params[:id])
if @managment.update(article_params)
redirect_to @managment
else
render 'edit'
end
end
def destroy
@managment.destroy
flash[:success] = "Managment deleted"
redirect_to managments_path
end
private
def managment_params
params.require(:managment).permit(
:title, :budget,
:procent1, :procent2, :procent3, :procent4,
:procent5, :procent6, :procent7,
:procent8, :procent9, :procent10,
:procent11, :procent12, :result1,
:result2, :result3, :objectivesname1,
:objectivesname2, :objectivesname3,
:lowprocent1, :lowprocent2, :lowprocent3,
:medprocent1, :medprocent2, :medprocent3,
:highprocent1, :highprocent2, :highprocent3,
:lowobjectives1, :lowobjectives2, :lowobjectives3,
:medobjectives1, :medobjectives2, :medobjectives3,
:highobjectives1, :highobjectives2, :highobjectives3
)
end
def correct_user
@managment = current_user.managments.find_by(id: params[:id])
redirect_to managments_path if @managment.nil?
end
end
show.html.erb
<li id="@managment-<%= @managment.id %>" >
<%= link_to gravatar_for(@managment.user, size: 50), @managment.user %>
<div class="user"><%= link_to @managment.user.name, @managment.user %></div>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" onclick="calculateManagement()" href="#home">@managment</a></li>
<li><a data-toggle="tab" href="#menu1" onclick="calculateManagement()">Data</a></li>
<li><a data-toggle="tab" href="#menu2" onclick="calculateManagement()">Desired return sheet</a></li>
<li><a data-toggle="tab" href="#menu3" onclick="calculateManagement()">Expected return sheet</a></li>
<li><a data-toggle="tab" href="#menu4" onclick="calculateManagement()">Cost sheet</a></li>
</ul>
<div class="tab-content">
<div id="home" class="tab-pane fade in active">
<h3>@managment</h3>
<div class="field" id="totalbudget">
<input class="inputbudget procentages" id="budget" onkeydown="return false" value="<%= @managment.title %>">
<div class="colum">
<h1>Budget</h1>
<input class="inputbudget procentages" id="budget" onkeydown="return false" value="<%= @managment.budget %>">
</div>
<div class="colum">
<h4>low presence</h4>
<p>precentages</p>
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent1 %>">%
<p>result</p>
<input class="inputbudget" id="result1" onkeydown="return false" value="<%= @managment.result1 %>">
</div>
<div class="colum">
<h4>Medium presence</h4>
<p>precentages</p>
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent2 %>">%
<p>result</p>
<input class="inputbudget" id="result2" onkeydown="return false" value="<%= @managment.result2 %>">
</div>
<div class="colum">
<h4>High presence</h4>
<p>precentages</p>
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent3 %>">%
<p>result</p>
<input class="inputbudget" id="result3" onkeydown="return false" value="<%= @managment.result3 %>">
</div>
</div>
<span id="title">
<h1>Weighings</h1>
</span>
<div class="field" id="weighings">
<div class="colum">
<h4>Low presence</h4>
<input class="inputbudget procentages" id="lowplow" onkeydown="return false" value="<%= @managment.procent4 %>">%
<input class="inputbudget procentages" id="lowpmed" onkeydown="return false" value="<%= @managment.procent5 %>">%
<input class="inputbudget procentages" id="lowphigh" onkeydown="return false" value="<%= @managment.procent6 %>">%
</div>
<div class="colum">
<h4>Medium presence</h4>
<input class="inputbudget procentages" id="medplow" onkeydown="return false" value="<%= @managment.procent7 %>">%
<input class="inputbudget procentages" id="medpmed" onkeydown="return false" value="<%= @managment.procent8 %>">%
<input class="inputbudget procentages" id="medphigh" onkeydown="return false" value="<%= @managment.procent9 %>">%
</div>
<div class="colum">
<h4>High presence</h4>
<input class="inputbudget procentages" id="highplow" onkeydown="return false" value="<%= @managment.procent10 %>">%
<input class="inputbudget procentages" id="highpmed" onkeydown="return false" value="<%= @managment.procent11 %>">%
<input class="inputbudget procentages" id="highphigh" onkeydown="return false" value="<%= @managment.procent12 %>">%
</div>
</div>
<div class="field">
<h1>Objectives</h1>
<h4>low presence</h4>
<input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname1 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent1 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent1 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent1 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives1 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives1 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives1 %>">
<h4>Medium presence</h4>
<input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname2 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent2 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent2 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent2 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives2 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives2 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives2 %>">
<h4>High presence</h4>
<input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname3 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent3 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent3 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent3 %>">%
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives3 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives3 %>">
<input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives3 %>">
</div>
</div>
<div id="menu1" class="tab-pane fade">
<h3>Data</h3>
<!--START BUDGET FORM -->
<form class="budgetresultsoutput" id="totalbudget">
<!--End budget output-->
<!--Procentages output-->
<div class="row datarowbudget">
<div class="colum" id="columtext">
<p>P.O.I</p>
<input class="box names" type="text" id="title3-0" value="Domestic" onkeydown="return false" placeholder="Slice #1 title" />
<input class="box names" type="text" id="title2-1" value="Continental" onkeydown="return false" placeholder="Slice #1 title" />
<input class="box names" type="text" id="title2-2" value="International" onkeydown="return false" placeholder="Slice #1 title" />
<input class="box" type="text" id="title2-2" value="Total" onkeydown="return false" placeholder="Slice #1 title" />
</div>
<!-- COLUM 1/LOW-->
<div class="colum" id="regio">
<p>Low</p>
<input class="box" value="1" id="value3-0" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-1" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-2" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-9" type="text" onkeydown="return false" />
</div>
<!-- COLUM 2 MEDIUM -->
<div class="colum" id="regio">
<p>Medium</p>
<input class="box" value="1" id="value3-3" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-4" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-5" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-10" type="text" onkeydown="return false" />
</div>
<!-- COLUM 3 HIGH -->
<div class="colum" id="regio">
<p>High</p>
<input class="box" value="1" id="value3-6" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-7" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-8" type="text" onkeydown="return false" />
<input class="box" value="1" id="value3-11" type="text" onkeydown="return false" />
</div>
<!--Budget output-->
<div class="colum columbudget" id="regio">
<p>Budget</p>
<input id="budgetdata" type="text" name="budget" value="<%= @managment.budget %>" onkeydown="return false"><br>
</div>
<div class="colum" id="regioprec">
<!--Low presence:-->
<p>Procentages</p>
<input class="procentages" id="lowdata" type="text" name="low" value="<%= @managment.procent1 %>" onkeydown="return false">%<br>
<input class="procentages"id="meddata" type="text" name="low" value="<%= @managment.procent2 %>" onkeydown="return false">%<br>
<input class="procentages" id="highdata" type="text" name="low" value="<%= @managment.procent3 %>" onkeydown="return false">%<br>
</div>
</div>
<!--End procentages input-->
</div>
<div id="menu2" class="tab-pane fade">
<h3>Desired return sheet</h3>
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.</p>
</div>
<div id="menu3" class="tab-pane fade">
<h3>Expected return sheet</h3>
<p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
</div>
<div id="menu4" class="tab-pane fade">
<h3>Cost sheet</h3>
<p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
</div>
</div>
<span class="timestamp">
<% if current_user?(@managment.user) %>
<%= link_to "delete", @managment, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</span>
</li>
<%= link_to 'Edit', edit_managment_path(@@managment) %> |
<%= link_to 'Back', managments_path %>
<script type="text/javascript">
//CALCULATE MANAGEMENT
function calculateManagement() {
//START OF BUDGET(data) PART
var domesticResultLow = document.getElementById('value3-0');
var domesticResultMed = document.getElementById('value3-1');
var domesticResultHigh = document.getElementById('value3-2');
var domesticResultFinal = document.getElementById('value3-9');
var continentalResultLow = document.getElementById('value3-3');
var continentalResultMed = document.getElementById('value3-4');
var continentalResultHigh = document.getElementById('value3-5');
var continentalResultFinal = document.getElementById('value3-10');
var globalResultLow = document.getElementById('value3-6');
var globalResultMed = document.getElementById('value3-7');
var globalResultHigh = document.getElementById('value3-8');
var globalResultFinal = document.getElementById('value3-11');
var lowProcentageLow = document.getElementById('lowplow').value;
var lowProcentageMed = document.getElementById('lowpmed').value;
var lowProcentageHigh = document.getElementById('lowphigh').value;
var medProcentageLow = document.getElementById('medplow').value;
var medProcentageMed = document.getElementById('medpmed').value;
var medProcentageHigh = document.getElementById('medphigh').value;
var highProcentageLow = document.getElementById('highplow').value;
var highProcentageMed = document.getElementById('highpmed').value;
var highProcentageHigh = document.getElementById('highphigh').value;
var resultOne = document.getElementById('result1').value;
var resultTwo = document.getElementById('result2').value;
var resultThree = document.getElementById('result3').value;
var lowProcentLow = (resultOne /100 )* lowProcentageLow;
domesticResultLow.value = lowProcentLow;
var lowProcentMed = (resultOne /100 )* lowProcentageMed;
domesticResultMed.value = lowProcentMed;
var lowProcentHigh = (resultOne /100 )* lowProcentageHigh;
domesticResultHigh.value = lowProcentHigh;
var medProcentLow = (resultTwo /100 )* medProcentageLow;
continentalResultLow.value = medProcentLow;
var medProcentMed = (resultTwo /100 )* medProcentageMed;
continentalResultMed.value = medProcentMed;
var medProcentHigh = (resultTwo /100 )* medProcentageHigh;
continentalResultHigh.value = medProcentHigh;
var highProcentLow = (resultThree /100 )* highProcentageLow;
globalResultLow.value = highProcentLow;
var highProcentMed = (resultThree /100 )* highProcentageMed;
globalResultMed.value = highProcentMed;
var highProcentHigh = (resultThree /100 )* highProcentageHigh;
globalResultHigh.value = highProcentHigh;
domesticResultFinal.value = resultOne;
continentalResultFinal.value = resultTwo;
globalResultFinal.value = resultThree;
//END OF BUDGET(data) PART
}
//No letters
function isNumber(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
}
//
</script>
答案 0 :(得分:1)
你的问题在这里
@user = User.find(params[:id])
@managment = current_user.managments.find_by_id(params[:id])
你的@management结尾为零。您将相同的ID传递给用户和管理查询(顺便说一下,它是拼写管理)。
我认为你想要做的就是获得管理权。从params[:id]
开始,然后从那里获取相关用户。你可以这样做:
@managment = Managment.find_by(id: params[:id])
if !@managment
raise ActionController::RoutingError.new('Not Found')
end
@user = @managment.user
注意我已为find_by
添加了一些错误处理,如果找不到记录,则会返回nil。如果发生这种情况,您希望将错误转发给Rails&#39;内置404页面(使用raise
完成)。