簡體   English   中英

Ruby on Rails:User_id和category_id為nil

[英]Ruby on Rails: User_id and category_id is nil

接下來是我的最后一個問題( Ruby on Rails:兩個模型之間的關系 ),我遇到了一些新問題:

我正在使用Devise,您可以在其中輸入電子郵件旁邊的用戶名,等等。 這有效,並且名稱被保存到數據庫。

現在,我試圖在特定的“顯示”頁面上調用該用戶名,以說明誰創建了請求:

<%= @request.user.name if @request.user %>

此外,我只希望創建請求的特定用戶能夠刪除和編輯:

<% if current_user && @request.user == current_user %>
   <%= link_to edit_request_path(@request), class: "btn btn-default" do %>
   <span class="glyphicon glyphicon-edit"></span>
       Edit
   <% end %>
   <%= link_to @request, method: :delete, data: { confirm: 'Bist du sicher?' }, class: "btn btn-default" do %>
   <span class="glyphicon glyphicon-trash"></span>
       Löschen
   <% end %>
<% end %>

為此,我在我的request_controller.rb中設置了一個類:

def correct_user
  @request = current_user.requests.find_by(id: params[:id])
  redirect_to requests_path, alert: 'Keine Berechtigung bearbeiten' if @request.nil?
end

但是,既不會顯示用戶名,也不會顯示刪除和編輯按鈕:(

這是request.rb:

class Request < ActiveRecord::Base
 belongs_to :category
 belongs_to :user
 validates :description, presence: true, length: { maximum: 500 }
 validates :title, presence: true
 validates :budget, presence: true
 validates :category, presence: true
end

和user.rb:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
         has_many :requests
         validates :name, presence: true
end

我進行了此遷移,以將UserID添加到Requests模型,以便可以通過@ request.user.name調用用戶:

class AddUserIdToRequests < ActiveRecord::Migration
  def change
    add_column :requests, :user_id, :integer
  end
end

我的request_controller.rb的摘錄:

class RequestsController < ApplicationController
before_action :correct_user, only: [:edit, :update, :destroy]

private
    def set_request
      @request = Request.find(params[:id])
    end

    def correct_user
      @request = current_user.requests.find_by(id: params[:id])
      redirect_to requests_path, alert: 'Keine Berechtigung bearbeiten' if @request.nil?
    end

    def request_params
      params.require(:request).permit(:title, :description, :tags, :budget, :name)
    end

在渲染視圖之前,請確保調用了correct_user方法。 第二點,請確保request對象具有與之關聯的user 。(即,@ request.user不應為nil)

另外,在下面的行中,您比較登錄用戶和所有者的方式是錯誤的

<% if current_user && @request.user == current_user %>

應該是這樣的

<% if current_user && @request.user.id == current_user.id %>

如果您比較對象,它們將不會相同。 請比較id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM