문제

컨트롤러에서 사용할 수 있는 임시 속성을 원합니다.
나는 생각했다 attr_accessor 이 작업을 수행하는 가장 좋은 방법입니다.
하지만 내가 제출할 때 users_binded-입력하면 다음 오류가 발생합니다.

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-컨트롤러에서 볼 수 있듯이 데이터베이스에 입력합니다.
컨트롤러에서 임시 속성을 사용하는 방법을 모르겠습니다.
그럴까요? 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-problem이 있을 수 있음).
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가 올바르지 않습니까?
처럼 말했다:"attr_accsessor는 인스턴스에서 사용됩니다."
해결책은 다음과 같나요?

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

속성 유형이 모든 것이 될 수 있는 경우에만 의미가 있습니다(예:사용자 유형).
어떤 아이디어가 있나요?


편집2:
나는 그것을 확인하려고 노력한다. params[:users_binded] 다음과 함께:
flash[:notice] = params[:users_binded]
그리고 다음 오류가 발생합니다:
can't convert nil into String, 그래서 users_binded 매개변수가 올바르게 설정되지 않습니다.

라지 ... 질문에 매개변수를 추가해야 한다고 말했습니다.

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

여기가 문제인 것 같아요..

도움이 되었습니까?

해결책

문제는 다음과 관련이 없습니다. attr_accessor 조금도.괜찮습니다.문제는 템플릿 렌더링에 있습니다.

따라서 템플릿 보기를 추가해야 합니다. invite_now.html.erb 당신의 views/schedule/ 예배 규칙서

컨트롤러보다:

당신은 사용해야합니다 params[:schedule][:users_binded] 대신에 :user_binded.그래서 그것은 다음과 같을 것입니다

 user_binded = User.find_by_name(params[:schedule][:users_binded])
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top