我正在尝试在我的网站上实施“设置”页面。在此页面中,用户可以更改一些基本设置,例如他们的电子邮件和订阅电子邮件。现在,我只是想让他们能够取消订阅电子邮件。首次注册时,他们可以选中复选框,并将值存储在mysql数据库中。现在,我很难弄清楚如何从不同的页面更改它。 这是注册控制器的样子:
class SignUpsController < ApplicationController
def index
end
def new
@user = SignUp.new
end
def cost
return 10
end
def create
@user = SignUp.new(sign_ups_params)
if @user.save!
UserMailer.welcome_email(@user).deliver
flash[:notice] = "Thank you " + @user.first_name + ", account created successfully."
redirect_to(:controller => 'home')
else
flash[:error] = "something failed"
redirect_to :back
end
rescue
flash[:error] = "Failed to create user, email is taken or passwords do not match"
redirect_to :back
end
private
def sign_ups_params
params.require(:sign_ups).permit(:first_name, :last_name, :email, :password, :password_confirmation, :subscription)
end
end
以下是注册页面的部分视图,以显示我如何填写并提交表单:
<h3>Create New User</h3>
<%= form_for(:sign_ups, :url => {:action => 'create'}) do |f| %>
<table summary="Subject form fields">
<tr>
<th>First Name</th>
<td><%= f.text_field(:first_name) %></td>
</tr>
<tr>
<th>Last Name</th>
<td><%= f.text_field(:last_name) %></td>
</tr>
<tr>
<th>Email</th>
<td><%= f.email_field(:email) %></td>
</tr>
<tr>
<th>Password</th>
<td><%= f.password_field(:password) %></td>
</tr>
<tr>
<th>Password Conformation</th>
<td><%= f.password_field(:password_confirmation) %></td>
</tr>
<tr>
<th>Subscribe to email</th>
<td><%= f.check_box(:subscription) %></td>
</tr>
</table>
<input class="btn btn-primary" name="commit" type="submit" value="Create User"/>
</div>
我为设置页面制作了“配置文件”视图和控制器,但我不确定这是否是正确的方法,或者我应该只使用注册控制器。 提前谢谢!
答案 0 :(得分:1)
您可以而且应该使用您的signups_controller,因为您希望让用户能够编辑他的SignUp记录(或注册)。
您只需添加一些内容即可实现此功能。首先,在控制器中创建edit
和update
操作:
def edit
@user = SignUp.find(params[:id])
end
def update
@user = SignUp.find(params[:id])
respond_to do |format|
if @user.update(sign_up_params)
# do this
else
# do that
end
end
end
同时将您的sign_ups_params
重命名为其单数形式=&gt; sign_up_params
以及您的相应观点
views/sign_ups/edit.html.erb
<%= render 'form' %>
views/sign_ups/_form.html.erb
<%= form_for(@user, :url => {:action => 'update'}) do |f| %>
....
因为你的config / routes.rb中可能有resources :sign_ups
,所以你应该好好去。
从你的SignUp
中分离Profile
可能会让生活变得更加艰难,除非你以非常干净的方式使用像设计这样的宝石(这样做)。
您要更新哪个对象,或者哪个对象包含您要更新的属性?
如果您想更新sign_up_params
,请在SignUpsController
中进行更新,并根据建议的错误添加update
操作。
但是,如果您需要更新profile_params,请在ProfilesController
。
你现在可能会感到困惑。考虑一下自己查看别人的代码,看到ProfilesController
以及SignUpsController
create
行为。
为什么不使用一个ProfilesController,其中sign_up是Profile对象的创建动作?
如果您将其保留在SignUpsController
移动edit
以及update
那里。