首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >attr_accessor返回零?

attr_accessor返回零?
EN

Stack Overflow用户
提问于 2014-08-01 12:51:28
回答 1查看 1.4K关注 0票数 0

我想要一个临时属性,可以在控制器中使用。

我认为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还是别的什么?

schedule-model:

代码语言:javascript
复制
class Schedule < ActiveRecord::Base
  attr_accessor :users_binded
end

schedule-view:

代码语言:javascript
复制
<%= 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 %>

schedule-controller:

代码语言:javascript
复制
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

路由:

代码语言:javascript
复制
post "schedule/invite/:id" => "schedule#invite_now"

编辑:

我将控制器改为:

代码语言:javascript
复制
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将用于实例。“

以下是解决方案吗?

代码语言:javascript
复制
@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 .说我应该在这个问题上加上这些参数:

代码语言:javascript
复制
private
def schedule_params
  params.require(:schedule).permit(:id, :titel, :location, :date_time)
end

我想这就是问题所在..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 12:56:12

问题与attr_accessor一点关系都没有。那很好。问题是模板渲染。

因此,需要在您的invite_now.html.erb目录中添加模板视图views/schedule/

比你的控制器:

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

代码语言:javascript
复制
 user_binded = User.find_by_name(params[:schedule][:users_binded])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25080719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档