簡體   English   中英

attr_accessor返回nil嗎?

[英]attr_accessor returns nil?

我想要一個可以在控制器中使用的臨時屬性。
我認為attr_accessor是執行此操作的最佳方法。
但是,當我提交users_binded -input時,會發生以下錯誤:

Template is missing: Missing template schedule/invite_now, application/invite_now with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * ../views

我想在數據庫中找到具有users_binded -input的用戶,就像在控制器中看到的那樣。
我不知道如何在控制器中使用臨時屬性。
應該是Schedule.users_binded:users_binded還是其他名稱?

時間表模型:

class Schedule < ActiveRecord::Base
  attr_accessor :users_binded
end


日程安排視圖:

<%= form_for @schedule_invite, :as => :schedule, :url => schedule_invite_path, :method => :post, :html => {:class => 'navbar-form', :role => 'login'} do |schedule_form_builder| %>
  <p>
    <strong>..Benutzer:</strong>
    <%= schedule_form_builder.text_field :users_binded, :class => 'form-control', :placeholder => 'Benutzer'%>
  </p>
  <p>
    <strong>Title:</strong><br>
    <%= @schedule_invite.title %>
  </p>
  <p>
    <strong>Ort:</strong><br>
    <%= @schedule_invite.location %>
  </p>
  <p>
    <strong>Datum und Uhrzeit:</strong><br>
    <%= @schedule_invite.date_time.strftime("%A, %d.%m.%Y") %>
    <%= @schedule_invite.date_time.strftime("%H:%M:%S") %>
  </p>
  <p class="pull-right">
    <%= link_to "Zurück", root_path, :class => 'btn btn-danger' %>&nbsp;
    <%= schedule_form_builder.submit 'Termin teilen?', :class => 'btn btn-success' %>
  </p>
<% end %>


時間表控制器:

class ScheduleController < ApplicationController
def invite_now
    begin #try
      #user_name = @schedule_invite.users_binded.to_s
      user_binded = User.find_by_name(:user_binded)
    rescue #catch
      if user_binded.nil?
        flash[:notice] = 'Der Benutzer konnte nicht gefunden werden.'
        @schedule_invite = current_user.schedules.find(params[:id])
        render :action => "invite"
      else
        @schedule_invite = user_binded.schedules.find(params[:id])
        user_binded.schedules << @schedule_invite
        flash[:notice] = 'Der Termin wird nun mit dem Benutzer ' + user_binded.name + 'geteilt.'
        redirect_to :root
      end
    end
  end
end


路線:

post "schedule/invite/:id" => "schedule#invite_now"


編輯:
我將控制器更改為此:

 def invite_now begin #try #user_name = @schedule_invite.users_binded.to_s user_binded = User.find_by_name(params[:user_binded]) rescue #catch if user_binded.nil? flash[:notice] = 'Der Benutzer konnte nicht gefunden werden.' @schedule_invite = current_user.schedules.find(params[:id]) render :action => "invite" end end if user_binded.nil? flash[:notice] = 'Der Benutzer konnte nicht gefunden werden.' @schedule_invite = current_user.schedules.find(params[:id]) render :action => "invite" else @schedule_invite = user_binded.schedules.find(params[:id]) user_binded.schedules << @schedule_invite flash[:notice] = 'Der Termin wird nun mit dem Benutzer ' + user_binded.name + 'geteilt.' redirect_to :root end end 

這樣,我就不需要invite_now.html.erb
發生的問題如下(可能存在attr_accessor問題):
SQL語句
user_binded = User.find_by_name(params[:user_binded])
回報/負載
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."name" IS NULL LIMIT 1
這樣attr_accessor是不正確的?
正如Doon所說:“ attr_accsessor將用於實例。”
解決方案如下嗎?

 @schedule_invite = current_user.schedules.find(params[:id]) @schedule_invite.user_binded = User.find_by_name(params[:users_binded]) 

只有屬性類型可以是所有內容(例如用戶類型),才有意義。
有任何想法嗎 ?


EDIT2:
我嘗試使用以下方法檢查params[:users_binded]
flash[:notice] = params[:users_binded]
並且發生此錯誤:
can't convert nil into String ,因此無法正確設置參數users_binded。

RAJ ...說我應該在問題中添加參數:

 private def schedule_params params.require(:schedule).permit(:id, :titel, :location, :date_time) end 

我認為這是問題所在。

問題根本與attr_accessor 很好 問題在於模板渲染。

因此,您需要在views/schedule/目錄中添加模板視圖invite_now.html.erb

比您的控制器中:

您需要使用params[:schedule][:users_binded]而不是:user_binded 所以會像

 user_binded = User.find_by_name(params[:schedule][:users_binded])

暫無
暫無

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

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