请参阅问题底部的更新...
作为参考,这个问题是根据我在此处遇到的先前问题所做的一些修复而演变而来的:在Rails中关联两个模型(用户和配置文件)
我正在构建一个具有用户模型和配置文件模型的应用程序.
我想将这些模型关联起来:
- 在用户创建帐户后,他会自动发送到"创建配置文件"页面,并且他创建的配置文件仅连接到该特定用户.
- 只有拥有该配置文件的用户才能对其进行编辑.
我使用nifty_generators生成了用户模型.当用户点击提交创建帐户时,我会将其重定向到"新配置文件"视图以创建配置文件.我是通过编辑用户控制器中的重定向路径来完成的.用户控制器如下所示:
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
flash[:notice] = "Thank you for signing up! You are now logged in."
redirect_to new_user_profile_path(:user_id => @user)
else
render :action => 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
当我点击"提交"以创建新用户时,它现在将我发送到以下网址,这似乎是正确的:localhost:3000/users/6/profile/new.但它抛出以下异常:
ProfilesController中的NoMethodError #new当你没想到它时,你有一个nil对象!评估nil.build时发生错误
跟踪表明问题出在Profile方法的New方法中.配置文件控制器如下所示:
def index
@user = User.find(params[:user_id])
@profile = @user.profile(:order => "created_at DESC")
end
def show
@user = User.find(params[:user_id])
@profile = @user.profile.find(params[:id])
end
def new
@user = User.find(params[:user_id])
@profile …Run Code Online (Sandbox Code Playgroud) 我已经设法使用Capistrano将我的应用程序部署到生产中,但我不明白如何处理我的数据库.我正在使用颠覆和乘客.
当我运行cap deploy时,新部署会重新启动所有内容.它清除了添加到数据库的数据.显然,必须有一个解决方案,但我很惊讶没有在网上找到关于如何处理这个问题.我已经阅读了Capistrano文档和许多教程.
我能找到的最好的是Advanced Rails食谱书,它讨论了如何将用户生成的内容放入共享目录,但这并不完全正确.
在使用Capistrano进行部署时,如何处理数据库?
我有一个用户页面,用户可以在其中输入和提交帖子.我正在使用Ajax允许用户从用户/显示页面执行此操作.当我试图让用户删除帖子时,我遇到了这个问题.当用户点击"删除"链接时,该帖子将从页面中删除.但是,当我重新加载页面时,帖子又回来了.它没有被摧毁.
我在不同的上下文中的用户/编辑页面上实现了相同的代码,并且工作正常,因为在提交表单时销毁了帖子记录.但是,在没有提交表单的情况下,我不确定如何使用它.
这是我的设置:
:user has_many :posts
:post belongs_to :user
:post belongs_to :post_type
:post_type has_many :posts
用户#show:
这是用户提交帖子的代码.这非常有效.
<% if logged_in? && current_user == @user %>
<% form_tag(:controller => "posts", :action => "create") do %>
<div><%= text_area_tag(:message, nil, :size => "27x3") %></div>
<div><%= submit_tag("Post") %></div>
<div><%= label_tag(:post_type_id, "Update type?", :class => 'typeLabel') %></div>
<div><%= collection_select(@posts, :post_type_id, PostType.all, :id, :name) %></div>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是显示帖子的代码,包括有争议的"删除链接":
<% @user.posts.each do |c| %>
<div class="postS">
<div><%=h c.message %></div>
<p><%=h c.post_type.name %></p>
<p>Posted …Run Code Online (Sandbox Code Playgroud) 我的问题是:当我编辑个人资料页面时,如何让我的个人资料控制器的编辑/更新方法停止创建新记录?
我有一个用户模型和配置文件模型.
user has_one :profile.
profile belongs_to :user.
我的routes.rb看起来像这样:map.resources:users,:has_one =>:profile
当我的应用程序的访问者创建用户并点击提交时,他们将被定向到"创建个人资料"屏幕.
以下控制器创建一个配置文件,以便创建的配置文件URL为:localhost:3000/users/[user_id]/profile
def new
@profile = `current_user.build_profile`
end
def create
@profile = current_user.build_profile(params[:profile])
if @profile.save
flash[:notice] = 'Profile was successfully created.'
redirect_to user_profile_path
else
flash[:notice] = 'Error. Something went wrong.'
render "new"
end
end
Run Code Online (Sandbox Code Playgroud)
一切正常.
编辑配置文件时出现问题.
起初看起来很好.当我转到"编辑个人资料"视图时,网址是正确的.例如,如果"显示配置文件"视图的网址是localhost:3000/users/1/profile,则"编辑配置文件"视图显示为:localhost:3000/users/1/profile/edit
非常好.
当我进行更改并单击更新按钮时,这似乎也有效.我被引导到正确的"显示配置文件"视图,我得到一个确认更改的闪存通知.
所以这是奇怪的部分.当我回到我的配置文件索引以查看应用程序中的所有配置文件时,结果表明应用程序每次更新配置文件时都创建了新的配置文件记录.原始配置文件记录仍然存在,但有新的附加记录.请记住,我的应用中的所有配置文件都与用户绑定,用户只能拥有一个配置文件.因此,如果我的应用程序中有5个用户,那么现在可能有10个不同的配置文件,每个配置文件都有一个导致已破坏页面的URL,因为数据库中不存在user_id.例如,localhost:3000/users/7/profile,users/8/profile等.
记录将保存到我的数据库中的配置文件表中,但user_id列显示NUL.
我认为问题来自(a)配置文件控制器中的编辑/更新方法,或(b)我用于在配置文件索引页面上显示配置文件的代码.
这是编辑和更新方法的配置文件控制器:
def edit
@profile = current_user.profile(params[:id])
end
def update
@profile = current_user.profile.find(params[:id])
if @profile.update_attributes(params[:profile])
flash[:notice] = 'Profile was successfully updated.'
redirect_to(@profile)
else
render "edit"
end
Run Code Online (Sandbox Code Playgroud)
结束 …
我建立了一个基本的搜索表单,可以查询我的应用程序的一个表中的一列。我遵循了第37集Railscast:http: //railscasts.com/episodes/37-simple-search-form
这是我的问题。我想显示用户在显示搜索结果的视图中进行的搜索查询。在我的应用中,搜索查询我的个人资料模型的邮政编码列,并返回包含正确邮政编码的个人资料列表。在搜索返回的配置文件列表的顶部,我希望它说“位于[查询的邮政编码]中的配置文件”。
我确定可以这样做,因为查询的邮政编码已传递到显示结果的url中。因此,如果该URL可以接收它,那么还必须有某种方法也可以在页面的视图中显示它。但是我没有。
请记住,我没有使用任何搜索插件,并且暂时不想使用任何插件。这是我的第一个应用程序,因此我不想在不需要的地方增加复杂性。
根据Ryan在Railscast中的说明,这是我的设置:
档案控制器
def index
@profiles = Profile.search(params[:search])
end
Run Code Online (Sandbox Code Playgroud)
轮廓模型
def self.search(search)
if search
find(:all, :conditions => ['zip LIKE ?', "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
个人资料/INDEX.HTML.ERB
<% form_tag ('/profiles', :method => :get) do %>
<%= text_field_tag :search, params[:search], :maxlength => 5 %>
<%= submit_tag "Go", :name => nil %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
搜索本身运行良好,所以这不是问题。我只需要知道如何在显示结果的视图中显示查询的邮政编码。
谢谢!
像今天的几乎所有应用程序一样,我有用户通过标准文本输入输入各种信息.我的应用程序在Rails上运行.
逃避&符号作为站点副本的一部分等等,这是一个明智的选择.但是如何逃避用户动态输入的&符?目前,它正在破坏我的前端验证.
controller ×2
views ×2
ajax ×1
capistrano ×1
database ×1
deployment ×1
escaping ×1
html ×1
methods ×1
search ×1
svn ×1
user-input ×1
validation ×1
xhtml ×1