我想要一个临时属性,可以在控制器中使用。
我认为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:
class Schedule < ActiveRecord::Base
attr_accessor :users_binded
endschedule-view:
<%= 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' %>
<%= schedule_form_builder.submit 'Termin teilen?', :class => 'btn btn-success' %>
</p>
<% end %>schedule-controller:
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我想这就是问题所在..。
发布于 2014-08-01 12:56:12
问题与attr_accessor一点关系都没有。那很好。问题是模板渲染。
因此,需要在您的invite_now.html.erb目录中添加模板视图views/schedule/。
比你的控制器:
您需要使用params[:schedule][:users_binded]而不是:user_binded。所以就像
user_binded = User.find_by_name(params[:schedule][:users_binded])https://stackoverflow.com/questions/25080719
复制相似问题