简体   繁体   English

Ruby on Rails 5 || 合并微博和博客||

[英]Ruby on Rails 5 || Merging microposts and blog ||

What i have done is created microposts(managments) in blog post tutorial of rails, but now edit,destroy and new work. 我所做的是在rails的博客文章教程中创建了microposts(管理),但是现在进行编辑,破坏和新工作。 Show doesn't 显示不

Now i'm getting the following error 现在我收到以下错误

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>

managments controller: 管理控制器:

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

Your problem is here 你的问题在这里

@user = User.find(params[:id])
@managment = current_user.managments.find_by_id(params[:id])

Your @management is ending up nil. 您的@management结尾为零。 You are passing the same id to the User and Managment queries (it's spelled management, by the way). 您正在将相同的ID传递给User和Managment查询(顺便说一句,它是拼写管理)。

What I think you're trying to do is get the 'managment' from params[:id] , and then get the associated user from there. 我认为您要尝试的是从params[:id]获取“ management”,然后从那里获取关联的用户。 You can do this: 你可以这样做:

@managment = Managment.find_by(id: params[:id])
if !@managment
  raise ActionController::RoutingError.new('Not Found')
end
@user = @managment.user

Note I've added some error handling for find_by , which will return nil if the record is not found. 注意我为find_by添加了一些错误处理,如果未找到该记录,它将返回nil。 If this happens, you want to forward the error to Rails' builtin 404 page (done with the raise ). 如果发生这种情况,您想将错误转发到Rails的内置404页面(用raise来完成)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM