如果您还没有其他地方的信息(例如来自用户会话),是否有办法只将表单参数显示为输入字段?
这是我的表格:
<%= simple_form_for [@user, Message.new] do |f| %>
<p>
<%= f.input :name, label: "Name: ", input_html: {size:50} %>
<%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
<%= f.input :message_text, label: "Message: " %>
</p>
<p>
<%= f.button :submit, "Send Message" %>
</p>
如果填写表单的人当前没有登录,我会有效地希望显示“名称”,如果他们是,则预先填充用户的“名字姓氏”。
电子邮件地址相同。
邮件的收件人应该收到表单元素或预先填充的元素,具体取决于相关内容。
这是在表单视图或MessagesController中发生的吗?
ADDED:我还在下面定义了message_params,它在'create'方法中调用:
def message_params
params.require(:message).permit(:name, :email, :message_text, :subject, :is_read, :user_id)
end
这会产生影响吗?
答案 0 :(得分:1)
在您的控制器中:
@user = current_user || User.new
答案 1 :(得分:0)
新动作
def new
if current_user
@message = Message.new(:email => current_user.email, :name => current_user.firstname + " " + current_user.lastname)
else
@message = Message.new
end
end
视图
<%= simple_form_for @message do |f| %>
<p>
<%= f.input :name, label: "Name: ", input_html: {size:50} %>
<%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
<%= f.input :message_text, label: "Message: " %>
</p>
<p>
<%= f.button :submit, "Send Message" %>
</p>
答案 2 :(得分:0)
通过一些帮助来解决这个问题。添加到消息控制器:
def new
@user = User.find_by_username(params[:user_id])
@message = Message.new
if current_user.present?
@message.name = current_user.name
@message.email = current_user.email
end
# display form for 'new' message
end
添加到用户模型:
def name
"#{firstname} #{lastname}"
end
修改了新消息的视图:
<%= simple_form_for [@user, @message] do |f| %>
<%= f.input :name, label: "Name: ", input_html: {size:50} %>
<%= f.input :email, label: "E-mail: ", input_html: {size:50} %>
<%= f.input :subject, label: "Subject: ", input_html: {size:100} %>
<%= f.input :message_text, label: "Message: " %>
<p>
<%= f.button :submit, "Send Message" %>
</p>
<% end %>
感谢@Pierre正确方向的推动。